错误:PL/SQL:ORA-00904::标识符无效
Posted
技术标签:
【中文标题】错误:PL/SQL:ORA-00904::标识符无效【英文标题】:error:PL/SQL: ORA-00904: : invalid identifier 【发布时间】:2014-06-23 09:23:47 【问题描述】:CREATE OR REPLACE PACKAGE pls_check2 AS
PROCEDURE check_proc(p_item_cat NUMBER,
p_sub_cat NUMBER,
p_pack_is NUMBER,
p_pack_name NUMBER,
v1 OUT NUMBER,
v2 OUT NUMBER,
v3 OUT NUMBER,
v4 OUT NUMBER);
PROCEDURE package_info1(param1 NUMBER, param2 NUMBER, param3 NUMBER);
END pls_check2;
CREATE OR REPLACE PACKAGE BODY pls_check2 AS
v1 NUMBER;
v2 NUMBER;
v3 NUMBER;
v4 NUMBER;
PROCEDURE check_proc(p_item_cat NUMBER,
p_sub_cat NUMBER,
p_pack_is NUMBER,
p_pack_name NUMBER,
v1 OUT NUMBER,
v2 OUT NUMBER,
v3 OUT NUMBER,
v4 OUT NUMBER) IS
CURSOR c1 IS
SELECT ic.id
FROM itemcategory ic
WHERE ic.id = p_item_cat;
BEGIN
v1 := p_item_cat;
v2 := p_sub_cat;
v3 := p_pack_is;
v4 := p_pack_name;
FOR c_p IN c1 LOOP
INSERT INTO master_product_table
(SELECT NULL,
NULL,
package_info1(c_p.id, v2, v3)
FROM package);
END LOOP;
DBMS_OUTPUT.put_line('hello');
END;
PROCEDURE package_info1(param1 NUMBER, param2 NUMBER, param3 NUMBER) IS
v_is_incentivized VARCHAR2(20);
BEGIN
SELECT is_incentivized
INTO v_is_incentivized
FROM package pk
WHERE pk.id = 1;
DBMS_OUTPUT.put_line('hi');
END;
END pls_check2;
编译时出现以下错误:
Error(18,1): PL/SQL: SQL Statement ignored
Error(33,7): PL/SQL: ORA-00904: : invalid identifier
【问题讨论】:
您有一个名为“package”的表。你不应该使用keywords as identifiers 哦,是的,我确实有一个名为 package 的表,它是业务需求,我无法更改它 当我检查代码似乎没问题时,这段代码仍然给我同样的错误。 @user3751229 这是一个非常愚蠢的业务需求。您不能告诉他们您需要为其添加前缀/后缀(例如,将其命名为TAB_PACKAGE
)吗?
【参考方案1】:
您正尝试从 SQL 调用 PROCEDURE
。这是不允许的(因为它真的没有意义)。将package_info1
更改为
function package_info1(param1 NUMBER, param2 NUMBER, param3 NUMBER)
return number;
在包头和到
function package_info1(param1 NUMBER, param2 NUMBER, param3 NUMBER)
return number IS
v_is_incentivized VARCHAR2(20);
BEGIN
SELECT is_incentivized
INTO v_is_incentivized
FROM package pk
WHERE pk.id = 1;
DBMS_OUTPUT.put_line('hi');
RETURN 1;
END;
在包体中,它会编译。不过,我真的建议您重命名您的 PACKAGE
表 - 该名称将给您带来无尽的痛苦。
【讨论】:
以上是关于错误:PL/SQL:ORA-00904::标识符无效的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00904 在 DATE 列上使用“MERGE INTO”和“SELECT FROM dual”时出现“无效标识符”错误