我遇到了动态SQL的麻烦,我希望能够显示department_id:
CREATE OR REPLACE PROCEDURE pro_two_tables
(p_input VARCHAR2) IS
v_department_id employees.department_id%TYPE;
BEGIN
EXECUTE IMMEDIATE
'SELECT department_id
/* MYSTERY FOR ME */
FROM ' || p_input || '
WHERE manager_id = 205';
DBMS_OUTPUT.PUT_LINE('You selected ID from the table' || ' ' || p_input || ' ' || 'ID is' ||' ' || v_department_id);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' I petty the fool who wrote this');
END;
我似乎不明白如何在这个程序中使用"INTO“条款。我正在阅读这个问题,并做一些“测试”,尽管我相信如果有人能向我解释这一点,那将是很有帮助的。
发布于 2014-01-12 20:26:11
INTO位于立即执行的后面,如
declare
foo number;
bar number;
begin
execute immediate 'select 1,2 from dual' into foo, bar;
dbms_output.put_line(foo ||','||bar);
end;
/
这些指纹:
1,2
请注意,如果您发现自己使用了动态SQL,那么检查您的设计通常是个好主意。
发布于 2014-12-05 14:14:11
CREATE OR REPLACE PROCEDURE pro_two_tables (i_table_name VARCHAR2)
IS
v_record_id NUMBER;
v_record_name VARCHAR2 (500) := 'Name Record'; -- Insert your Name Value
sql_stmt VARCHAR2 (500);
BEGIN
sql_stmt :=
'SELECT id
FROM ' || i_table_name || ' WHERE name = :1';
EXECUTE IMMEDIATE sql_stmt INTO v_record_id USING v_record_name;
DBMS_OUTPUT.PUT_LINE( 'You selected ID from the table'
|| ' '
|| i_table_name
|| ' '
|| 'ID is'
|| ' '
|| v_record_id);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('No data found');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (' I petty the fool who wrote this');
END;
对于立即执行,您可以使用:
https://stackoverflow.com/questions/21078369
复制相似问题