Oracle SQL-从select中选择一个值,并将其用作insert的一部分
我正在选择一个数值并将其存储到一个变量中,但当我在insert语句中使用它时,会出现以下错误: ORA-00984:此处不允许使用列 这是我的SQL: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
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是唯一的,我只是把它作为安全的输入,但是如果不需要的话,我想我应该删除它。谢谢你的指点