2017-12-10 5 views
0

数値の値を選択して変数に格納していますが、insert文で使用すると次のエラーが表示されます。Oracle SQL - selectから値を選択して挿入の一部として使用

ORA-00984: column not allowed here.

これが私の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); 

任意の提案してください?多くのおかげで

+0

あなたは 'ROWNUMの= 1 'で心配する必要があります。これが必要な場合、 'publisher_name'は一意ではないので、' publisher_id'は本質的にランダムです。これは外部キーでなければならないようなものには奇妙です。 – APC

+0

パブリッシャーの名前はユニークですが、私はそれを安全のために入れましたが、必要がない場合は削除する必要があります。ポインタをありがとう – Ryan

答えて

2

あなたは可能性がINSERT INTO ... SELECTを使用して、単一のINSERT文として句これを:

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; 
+0

感謝します多くのありがとう – Ryan

2

あなたが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; 
/

Moreover, it's always better to use bind variables instead of literals as above samples. Since, literals mean parsing a SQL evertime.

関連する問題