編寫一個過程將查詢的欄位和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;
執行結果如: