簡體   English   中英

Oracle SQL-從select中選擇一個值並將其用作插入的一部分

[英]Oracle SQL - Selecting a value from select and using it as part of the insert

我正在選擇一個數字值並將其存儲到變量中,但是當我在insert語句中使用它時,出現此錯誤:

ORA-00984:此處不允許使用該列。

這是我的SQL:

DECLARE
   RyanuserID NUMBER(10);
BEGIN
   SELECT Publisher_ID
   INTO RyanuserID
   FROM tblPublishers
   WHERE Publisher_Name ='Ryan'
   AND ROWNUM = 1;
END;
/

INSERT INTO tblBooks (Barcode, Book_Title, Publisher_ID, Year_Published, Stock) 
VALUES ('45879654236547', 'Lean HTML and CSS', RyanuserID, '2010', 4);

有什么建議嗎? 非常感謝

您可以使用INSERT INTO ... SELECT將其表達為單個插入語句INSERT INTO ... SELECT

INSERT INTO tblBooks (Barcode, Book_Title, Publisher_ID, Year_Published, Stock)
SELECT '45879654236547', 'Lean HTML and CSS', Publisher_ID, '2010', 4
FROM tblPublishers
WHERE Publisher_Name = 'Ryan' AND ROWNUM = 1;

您應該在begin .. end語句之間使用它。 因為無法以這種方式識別RyanuserID ,所以從與表的列類型和變量的類型( tblPublishers.Publisher_ID%type )的兼容性的角度出發,最好將其定義為返回列的類型。

DECLARE 
   RyanuserID tblPublishers.Publisher_ID%type := &i_pbl_id; -- as an initialization value you may call in such a way.
   v_publisher_name tblPublishers.Publisher_Name%type := '&i_pbl_name' -- Ryan (as one of values);
BEGIN
   SELECT Publisher_ID  INTO RyanuserID FROM tblPublishers WHERE Publisher_Name = v_publisher_name AND ROWNUM = 1;
   INSERT INTO tblBooks (Barcode, Book_Title, Publisher_ID, Year_Published, Stock) VALUES ('45879654236547', 'Lean HTML and CSS', RyanuserID, '2010', 4);
END;
/

此外,最好還是使用bind variables代替上面的示例中的literals 既然如此, literals意思就是永遠解析SQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM