首页 > 代码库 > 编写一个过程将查询的字段和where条件中的字符串值动态调用

编写一个过程将查询的字段和where条件中的字符串值动态调用

以scott用户中的emp表为例,编写一个存储过程查询emp表中某个字段的值,但是要查哪个字段是不确定的,where条件中传入的字符串也是不确定的。

DECLARE
   v_a       VARCHAR2(20)   := 'sal';
   v_sql     VARCHAR2(200);
   TYPE tab_org_name     IS TABLE OF VARCHAR2(50);
   v_org_name_tab        tab_org_name;
BEGIN
   v_sql := 'SELECT '|| v_a ||' FROM emp';
   dbms_output.put_line(v_sql);
   EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_org_name_tab;
   FOR i IN 1 .. v_org_name_tab.count LOOP
      dbms_output.put_line(v_org_name_tab(i));
   END LOOP;
END;


技术分享

如果带where条件,一定要注意where条件中有字符串时对单引号的应用,正确代码如下:

DECLARE
   v_a       VARCHAR2(20)   := 'sal';
   v_info    VARCHAR2(20)   := '''CLERK'''; 
   v_sql     VARCHAR2(200);
   TYPE tab_org_name     IS TABLE OF VARCHAR2(50);
   v_org_name_tab        tab_org_name;
BEGIN
   v_sql := 'SELECT '|| v_a ||' FROM emp WHERE emp.JOB = '||v_info;
   dbms_output.put_line(v_sql);
   EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_org_name_tab;
   FOR i IN 1 .. v_org_name_tab.count LOOP
      dbms_output.put_line(v_org_name_tab(i));
   END LOOP;
END;

执行结果如下图:

技术分享




编写一个过程将查询的字段和where条件中的字符串值动态调用