编写一个过程将查询的字段和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;
执行结果如下图:
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。