Oracle SQL-从select中选择一个值,并将其用作insert的一部分

Oracle SQL-从select中选择一个值,并将其用作insert的一部分,sql,oracle,plsql,insert,Sql,Oracle,Plsql,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

我正在选择一个数值并将其存储到一个变量中,但当我在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。。。选择

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;

您可以使用
insert-INTO。。。选择

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;

您应该在
开始
之间进行<代码>结束语句。因为
RyanuserID
不是以这种方式识别的,从与表的列类型和变量类型兼容的角度来看,最好定义为返回列的类型(
tblPublishers.Publisher\u ID%type

此外,最好使用
绑定变量
而不是
文字
如上示例所示。因为,
literals
表示解析SQL 每次都是


您应该在
开始
之间进行<代码>结束语句。因为
RyanuserID
不是以这种方式识别的,从与表的列类型和变量类型兼容的角度来看,最好定义为返回列的类型(
tblPublishers.Publisher\u ID%type

此外,最好使用
绑定变量
而不是
文字
如上示例所示。因为,
literals
表示解析SQL 每次都是


您应该担心
rownum=1
。如果有必要的话,因为
publisher\u name
不是唯一的,那么
publisher\u id
基本上是随机的,这对于一些看起来应该是外键的东西来说是奇怪的。publisher name是唯一的,我只是把它作为安全的输入,但是如果不需要的话,我想我应该删除它。感谢您的建议您应该担心
rownum=1
。如果有必要的话,因为
publisher\u name
不是唯一的,那么
publisher\u id
基本上是随机的,这对于一些看起来应该是外键的东西来说是奇怪的。publisher name是唯一的,我只是把它作为安全的输入,但是如果不需要的话,我想我应该删除它。谢谢你的指点