我试图将我的查询结果存储到一个变量,以便我可以在另一个查询中使用它,但得到错误
create procedure store_validated_sku_id
("variable_sku_id" VARCHAR2)
as
BEGIN
SELECT vsku.SKU_ID INTO store_validated_sku_id.variable_sku_id
FROM vs_sku_discont_details_test discontd,vsx_dcs_sku vsku,auto_ship_view bcc
where discontd.sku_id = vsku.JDA_SKU_ID
and bcc.sku_id = vsku.SKU_ID AND vsku.web_eligible = 1
and vsku.discontinued =0 and bcc.auto_ship_eligible is null;
END store_validated_sku_id;
/
在编译器日志中获得以下错误:
Error(5,1): PL/SQL: SQL Statement ignored
Error(5,49): PLS-00302: component 'VARIABLE_SKU_ID' must be declared
Error(5,65): PL/SQL: ORA-00904: : invalid identifier
variable_sku_id
)(无论是双重还是单一,都会产生问题),你应该摆脱它们out
或in out
类型,因为in
(默认)类型参数不能用作赋值目标。将variable_sku_id
放在双引号之间会使标识符名称区分大小写。
删除双引号,它应该没问题(我已将您的查询更改为使用ANSI-92语法 - 将FROM
子句中的所有内容都设置为过时的旧式Oracle语法,应该避免使用):
create procedure store_validated_sku_id
(variable_sku_id VARCHAR2)
as
BEGIN
SELECT vsku.SKU_ID INTO store_validated_sku_id.variable_sku_id
FROM vs_sku_discont_details_test discontd
JOIN vsx_dcs_sku vsku
ON discontd.sku_id = vsku.JDA_SKU_ID
JOIN auto_ship_view bcc
ON bcc.sku_id = vsku.SKU_ID
WHERE vsku.web_eligible = 1
AND vsku.discontinued = 0
AND bcc.auto_ship_eligible is null;
END store_validated_sku_id;
CREATE OR REPLACE PROCEDURE store_validated_sku_id( variable_sku_id OUT VARCHAR2 ) IS
BEGIN
SELECT vsku.SKU_ID
INTO variable_sku_id
FROM vs_sku_discont_details_test discontd
JOIN vsx_dcs_sku vsku
ON discontd.sku_id = vsku.JDA_SKU_ID
JOIN auto_ship_view bcc
ON bcc.sku_id = vsku.SKU_ID
WHERE vsku.web_eligible = 1
AND vsku.discontinued = 0
AND bcc.auto_ship_eligible is null;
END store_validated_sku_id;