【问题标题】:PLS-00302: component 'VARIABLE_SKU_ID' must be declaredPLS-00302:必须声明组件“VARIABLE_SKU_ID”
【发布时间】:2019-03-23 09:08:36
【问题描述】:

我正在尝试将我的查询结果存储到一个变量中,以便我可以在另一个查询中使用它,但出现错误

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

【问题讨论】:

标签: sql oracle stored-procedures plsql


【解决方案1】:
  • 是的,你的主要问题是包装你的变量(variable_sku_id)的 带引号(无论是双引号还是单引号,都会产生问题), 你应该摆脱它们
  • 但还需要将其转换为outin out类型,因为a in(默认)类型参数不能用作赋值目标

【讨论】:

  • 关于out / in out 类型的好消息,我完全错过了那个。
【解决方案2】:

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;

【讨论】:

  • 谢谢它的工作,但我不得不稍作修改
【解决方案3】:
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;

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2021-01-06
    • 2015-04-26
    • 2021-08-13
    相关资源
    最近更新 更多