将 table 名称和列名称动态传递给 PL/SQL 存储过程
Passing table name and column name dynamically to PL/SQL Stored procedure
我试图将 table 名称和列名称传递给 oracle 中的存储过程,但它给我以下错误:table or view does not exist
下面是代码:
create or replace procedure jz_dynamic_sql_statement
(p_table_name in varchar2,
p_col1_name in varchar2,
p_check_result out integer)
as
v_error_cd est_runtime_error_log.error_cd%type;
v_error_msg est_runtime_error_log.error_msg%type;
v_sql varchar2(1024);
v_result number(10);
begin
v_result := 0;
v_sql := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=' || p_col1_name;
execute immediate v_sql into v_result;
p_check_result := v_result;
end;
如果返回的错误显示 table 不存在,则意味着您传入的 table 不存在,或者运行该过程的用户无法访问它。
您可以添加一个 dbms_output.put_line 语句来显示您正在构建的查询,然后在尝试立即执行之前自己尝试 运行。然后你就知道需要修复哪些错误了。
dbms_output.put_line('query : '||v_sql);
一定要开启dbms_output。
此外,从您尝试执行的操作来看,您将需要传递列名和列值。除非你查询的 tables 总是有列名 "COLUMNNAME".
试试这个:
v_sql := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=''' || p_col1_name|| '''';
我试图将 table 名称和列名称传递给 oracle 中的存储过程,但它给我以下错误:table or view does not exist
下面是代码:
create or replace procedure jz_dynamic_sql_statement
(p_table_name in varchar2,
p_col1_name in varchar2,
p_check_result out integer)
as
v_error_cd est_runtime_error_log.error_cd%type;
v_error_msg est_runtime_error_log.error_msg%type;
v_sql varchar2(1024);
v_result number(10);
begin
v_result := 0;
v_sql := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=' || p_col1_name;
execute immediate v_sql into v_result;
p_check_result := v_result;
end;
如果返回的错误显示 table 不存在,则意味着您传入的 table 不存在,或者运行该过程的用户无法访问它。
您可以添加一个 dbms_output.put_line 语句来显示您正在构建的查询,然后在尝试立即执行之前自己尝试 运行。然后你就知道需要修复哪些错误了。
dbms_output.put_line('query : '||v_sql);
一定要开启dbms_output。
此外,从您尝试执行的操作来看,您将需要传递列名和列值。除非你查询的 tables 总是有列名 "COLUMNNAME".
试试这个:
v_sql := 'select count(*) from ' || p_table_name ||' WHERE COLUMNNAME=''' || p_col1_name|| '''';