立即执行不返回预期结果以搜索整个字符串 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 代码本身,而不是它的图像)。
我正在尝试编写一个 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 代码本身,而不是它的图像)。