立即执行不返回预期结果以搜索整个字符串 table

Execute immediate not returning expected result to search a string in entire table

我正在尝试编写一个 PLSQL 块,如果它包含指定的查找文本,它将显示指定 table 的列名。

请为我的程序找到下面的代码:

执行后我没有得到任何结果。在示例 HR 模式中使用它。在下面的示例中,我试图找出包含 Steven 的列。

set serveroutput on;

exec col_name_string('EMPLOYEES','STEVEN')

;

我认为我的代码有一些问题,但仍然没有抛出任何运行时异常。

这段代码有效;注意第 14 行 - 连接列名称,不要绑定它。

(我更喜欢创建一个语句(在 l_str 中)以便我可以看到它(使用 dbms_output.put_line)并且 - 如果没问题 - 执行它)。

SQL> create or replace procedure col_name_string (tab_name    in varchar2,
  2                                               search_val  in varchar2)
  3  as
  4     cnt    number;
  5     l_str  varchar2 (200);
  6  begin
  7     for i in (select column_name
  8                 from user_tab_columns
  9                where table_name = upper (tab_name))
 10     loop
 11        l_str :=
 12              'select count(*) from '
 13           || tab_name
 14           || ' where upper(' || i.column_name || ') = upper(:search_val)';
 15        execute immediate l_str into cnt using search_val;
 16        if cnt > 0 then
 17           dbms_output.put_line('Column : ' || i.column_name || ' contains the string');
 18        end if;
 19     end loop;
 20  end;
 21  /

Procedure created.

SQL> set serveroutput on
SQL> exec col_name_string('EMP', 'KING');
Column : ENAME contains the string

PL/SQL procedure successfully completed.

SQL>

(顺便说一下,您宁愿 post 代码本身,而不是它的图像)。