可以呀,比如传进的是s_table_name;那么可以这样操作: Declare str varchar2(1000); Begin str:= 'select * from '||s_table_name; execute immediate str; End; 就可以了
可以的,我以前做的例子[code=SQ] CREATE OR REPLACE PROCEDURE P_GETROWCOUNT(TABLE_NAME IN VARCHAR2, ROWCOUNT OUT NUMBER, ORET OUT NUMBER) IS TABNUM NUMBER; NOROW EXCEPTION; SQLSTAT VARCHAR2(200); BEGIN SQLSTAT := 'select count(*) from user_tables where upper(table_name) = ' || UPPER(TABLE_NAME); EXECUTE IMMEDIATE SQLSTAT INTO TABNUM; IF TABNUM = 0 THEN RAISE NOROW; ELSE ORET := 0; SQLSTAT := 'SELECT COUNT(*) FROM ' || TABLE_NAME; EXECUTE IMMEDIATE REPLACE(SQLSTAT, '''') INTO ROWCOUNT; END IF;EXCEPTION WHEN NOROW THEN ORET := SQLCODE; ROWCOUNT := 0; WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE || '' || SQLERRM); END;[/code]
execute immediate
Declare
str varchar2(1000);
Begin
str:= 'select * from '||s_table_name;
execute immediate str;
End;
就可以了
CREATE OR REPLACE PROCEDURE P_GETROWCOUNT(TABLE_NAME IN VARCHAR2,
ROWCOUNT OUT NUMBER,
ORET OUT NUMBER) IS
TABNUM NUMBER;
NOROW EXCEPTION;
SQLSTAT VARCHAR2(200);
BEGIN
SQLSTAT := 'select count(*) from user_tables where upper(table_name) = ' ||
UPPER(TABLE_NAME);
EXECUTE IMMEDIATE SQLSTAT
INTO TABNUM;
IF TABNUM = 0 THEN
RAISE NOROW;
ELSE
ORET := 0;
SQLSTAT := 'SELECT COUNT(*) FROM ' || TABLE_NAME;
EXECUTE IMMEDIATE REPLACE(SQLSTAT, '''')
INTO ROWCOUNT;
END IF;EXCEPTION
WHEN NOROW THEN
ORET := SQLCODE;
ROWCOUNT := 0;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || '' || SQLERRM);
END;[/code]