form current cursor
如将第*11句改为 dbms_output. put_line(DropTableName.OBJECT.NAME)程序执行正确.oracle 不能用变量传递表名?请教!急急,在线等待!!!
drop table DropTableName.OBJECT_NAME;
改成
execute immediate 'drop table ' | |DropTableName.OBJECT_NAME;
直接执行是不行的,用下面的试试:
SQL_STR = 'drop table ' | | DropTableName.OBJECT_NAME ;
EXECUTE IMMEDATE SQL_STR;
用oracle的内部存储过程包dbms_sql构造sql,然后执行。见下面的例子(摘自sql programing)
PROCEDURE drop_object
(object_type_in IN VARCHAR2, object_name_in IN VARCHAR2)
IS
cursor_id INTEGER;
BEGIN
/*
| | Open a cursor which will handle the dynamic SQL statement.
| | The function returns the pointer to that cursor.
*/
cursor_id := DBMS_SQL.OPEN_CURSOR;
/*
| | Parse and execute the drop command which is formed through
| | concatenation of the arguments.
*/
DBMS_SQL.PARSE
(cursor_id,
'DROP ' | | object_type_in | | ' ' | | object_name_in,
DBMS_SQL.NATIVE);
/* Close the cursor. */
DBMS_SQL.CLOSE_CURSOR (cursor_id);
EXCEPTION
/* If any problem arises, also make sure the cursor is closed. */
WHEN OTHERS
THEN
DBMS_SQL.CLOSE_CURSOR (cursor_id);
END;
原文转自:http://www.ltesting.net
|