资源描述:
《oracle-用dbmssql在存储过程中创建表》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用DBMS_SQL包普通用户须有createanytable权限才可以用DBMS_SQL包--grantcreateanytabletoYOUR_USERNAME;Examples:用DBMS_SQL包执行DDL语句----------------------------------------------------TheDBMS_SQLpackagecanbeusedtoexecuteDDLstatementsdirectlyfromPL/SQL. 例1:这是一个创建一个表的过程的例子。该过程有两个参数:表名和字段及其类型的列表。CREATEORREPLACEPROCEDUREddlp
2、roc(tablenamevarchar2,colsvarchar2)AS cursor1INTEGER;BEGIN cursor1:=dbms_sql.open_cursor; dbms_sql.parse(cursor1,'CREATETABLE'
3、
4、tablename
5、
6、 '('
7、
8、cols
9、
10、')',dbms_sql.v7); dbms_sql.close_cursor(cursor1);end;/SQL>executeddlproc('MYTABLE','COL1NUMBER,COL2VARCHAR2(10)');PL/SQLproceduresuccessfully
11、completed.SQL>descmytable;Name Null? Type-------------------------------------------COL1 NUMBERCOL2 VARCHAR2(10)注意:DDL语句是由Parese命令执行的。因此,不能对DDL语句使用bind变量,否则你就会受到一个错误信息。下面的在DDL语句中使用bind变量的例子是错误的。 ****IncorrectExample****CREATEORREPLACE
12、PROCEDUREddlproc(tablenameVARCHAR2, colname VARCHAR2, coltype VARCHAR2)AS cursor1INTEGER; ignore INTEGER;BEGIN cursor1:=dbms_sql.open_cursor; dbms_sql.parse(cursor1,'CREATETABLE:x1(:y1:z1)',dbms_sql.v7); dbms_sql.bind_variable(cursor1,':x1',tabl
13、ename); dbms_sql.bind_variable(cursor1,':y1',colname); dbms_sql.bind_variable(cursor1,':z1',coltype); ignore:=dbms_sql.execute(cursor1); dbms_sql.close_cursor(cursor1);end;/虽然在过程创建时,没有错误信息。但在运行时,你将得到错误信息"ORA-00903:invalidtablename"。SQL>executeddlproc('MYTABLE','COL1','NUMBER');beginddlproc('MYT
14、ABLE','COL1','NUMBER');end;*ERRORatline1:ORA-00903:invalidtablenameORA-06512:at"SYS.DBMS_SYS_SQL",line239ORA-06512:at"SYS.DBMS_SQL",line25ORA-06512:at"SCOTT.DDLPROC",line8ORA-06512:atline1例2:删除表的过程。使用表明作为参数。createorreplaceproceduredroptable(table_namevarchar2)as cursor1integer;begin cursor1:=dbms
15、_sql.open_cursor; dbms_sql.parse(cursor1,'DROPTABLE'
16、
17、table_name,dbms_sql.v7); dbms_sql.close_cursor(cursor1);end;/SQL>begin 2 droptable('MYTABLE'); 3 end; 4 /PL/SQLproceduresuccessfullycompleted.例3