网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle 8i特性.
.Debian Sarge 上安装 Oracle 10g.
.实例解析:DB2中实现Oracle的相关.
.[Oracle] Ora2html--收集Oracle数.
.一个小巧但好用的数据库压缩算法.
.用sqlplus只输出数据到文本文件的.
.利用SQL * Plus复制遗留的Oracle.
.关于SGA设置的一点总结.
.详细介绍Oracle 8i中怎样实现实时.
.详解 Oracle 分布式系统数据复制.
.改变或关闭Oracle XDB的ftp和htt.
.ZT-Statspack安装配置使用说明一.
.解决升级数据库时遇到的Text fil.
.Oracle某个数据文件损坏,如何打.
.怎样判断画布中有重复纪录.
.什么是Mandrake Linux.
.Oracle高级复制.
.理解oracle的网络结构 解决你的连.
.Logon Trigger Example 登陆例子.
.Oracle笔记-物化视图.

使用 DBMS_SQL包执行DDL语句

发表日期:2008-2-9



  使用 DBMS_SQL包执行DDL语句
  ----------------------------------------------------
  The DBMS_SQL package can be used to execute DDL statements directly from PL/SQL.
  例 1:
  这是一个创建一个表的过程的例子。该过程有两个参数:表名和字段及其类型的列表。
  CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS
   cursor1 INTEGER;
  BEGIN
   cursor1 := dbms_sql.open_cursor;
   dbms_sql.parse(cursor1, 'CREATE TABLE ' tablename ' ( ' cols ' )', dbms_sql.v7);
   dbms_sql.close_cursor(cursor1);
  end;
  /
  SQL> execute ddlproc ('MYTABLE','COL1 NUMBER, COL2 VARCHAR2(10)');
  PL/SQL procedure sUCcessfully completed.
  SQL> desc mytable;
  Name Null? Type
  ------------------------------- -------- ----
  COL1 NUMBER
  COL2 VARCHAR2(10)
  注重:DDL语句是由Parese命令执行的。因此,不能对DDL语句使用bind变量,否则你就会受到一个错误信息。
  下面的在DDL语句中使用bind变量的例子是错误的。
   **** Incorrect Example ****
  CREATE OR REPLACE PROCEDURE ddlproc (tablename VARCHAR2,
   colname VARCHAR2,
   coltype VARCHAR2) AS
   cursor1 INTEGER;
   ignore INTEGER;
  BEGIN
   cursor1 := dbms_sql.open_cursor;
   dbms_sql.parse(cursor1, 'CREATE TABLE :x1 (:y1 :z1)', dbms_sql.v7);
   dbms_sql.bind_variable(cursor1, ':x1', tablename);
   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: invalid table name" 。
  SQL> execute ddlproc ('MYTABLE', 'COL1', 'NUMBER');
  begin ddlproc ('MYTABLE', 'COL1', 'NUMBER'); end;
  *
  ERROR at line 1:
  ORA-00903: invalid table name
  ORA-06512: at "SYS.DBMS_SYS_SQL", line 239
  ORA-06512: at "SYS.DBMS_SQL", line 25
  ORA-06512: at "SCOTT.DDLPROC", line 8
  ORA-06512: at line 1
  
  例2:
  删除表的过程。使用表明作为参数。
  create or replace procedure droptable (table_name varchar2) as
   cursor1 integer;
  begin
   cursor1 := ???????嚰??????桳瑵潤湷?????珙慴瑲灵???????????侼???????珚汱?????????珐汥捥??牦浯嘠两卌偟剁?呅剅?????侽????????????????????????????????????????????????????????????????????????侴?????????????????????????????????????????????????????暪硯慢敳???懲捣獥?????????????????????俄?????????????俋?????????????????????????潰敷扲極摬牥????????烄灩汥湩??捩潲潳瑦?捣獥???????????????????????????????猼牴湯?攼?????????????浥?猯牴湯????????????????????????????????????????隸????????????????? dbms_sql.open_cursor;
   dbms_sql.parse(cursor1, 'DROP TABLE ' table_name, dbms_sql.v7);
   dbms_sql.close_cursor(cursor1);
  end;
  /
  SQL> begin
   2 droptable('MYTABLE');
   3 end;
   4 /
  PL/SQL procedure successfully completed.
  
  例 3:
  执行任何DDL语句的过程。
以DDL语句为参数。
  create procedure anyddl (s1 varchar2) as
   cursor1 integer;
  begin
   cursor1 := dbms_sql.open_cursor;
   dbms_sql.parse(cursor1, s1, dbms_sql.v7);
   dbms_sql.close_cursor(cursor1);
  end;
  /
  SQL> execute anyddl('CREATE TABLE MYTABLE (COL1 NUMBER)');
  PL/SQL procedure successfully completed.
  SQL> desc mytable;
  Name Null? Type
  ------------------------------- -------- ----
  COL1 NUMBER
  SQL> execute anyddl('drop table mytable');
  PL/SQL procedure successfully completed.
上一篇:SQL基本语句 人气:961
下一篇:如何查出前台正在发出的sql语句 人气:617
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐