练习七 Procedure中使用DDL
1 在存储过程中使用ddl语句有如下异常:
create or replace procedure test_create_table
(Table_Name in VARCHAR2,
column_name1 in varchar2,
column_name2 in varchar2,
column_name3 in varchar2,
column_type in varchar2) as
/*修改某个表的表结构*/
begin
create table Table_Name( column_name1 column_type,
column_name2 column_type,
column_name3 column_type
);
end test_create_table;
Compilation errors for PROCEDURE CICI.TEST_CREATE_TABLE Error: PLS-: 出现符号 "CREATE"在需要下列之一时:
( begin
case declare exit for goto if loop mod null pragma raise
return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
Line:
Text: create table Table_Name(
Compilation errors for PROCEDURE CICI.TEST_CREATE_TABLE Error: PLS-: 出现符号 "CREATE"在需要下列之一时:
( begin
case declare exit for goto if loop mod null pragma raise
return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
Line:
Text: create table Table_Name(
2 将DML封装存入string中
create or replace procedure Modify_Table_Structure as
Pstring_droptable varchar2(2000);
Pstring_createtable varchar2(2000);
Pstring_deletetable varchar2(2000);
Pstring_altertable varchar2(2000);
pstring_inserttable varchar2(2000);
v_count integer;
begin
Pstring_droptable := 'drop table CONTRACT_KANGJIA_BACK';
Pstring_createtable := 'create table CONTRACT_KANGJIA_BACK as select * from CONTRACT_KANGJIA ';
Pstring_deletetable := 'delete from CONTRACT_KANGJIA';
Pstring_altertable := 'alter table CONTRACT_KANGJIA modify sell_money number(10,5)';
pstring_inserttable := 'insert into CONTRACT_KANGJIA (id, busiman_name, sell_date, product_type, sell_money) select id, busiman_name, sell_date, product_type, sell_money
from CONTRACT_KANGJIA_BACK'; select count(*)
into v_count
from user_tables
where table_name = 'CONTRACT_KANGJIA_BACK';
dbms_output.put_line('v_count 1 '||v_count);
if (v_count > 0) then
execute immediate Pstring_droptable;
dbms_output.put_line('v_count 2 '||v_count);
end if; execute immediate Pstring_createtable;
execute immediate Pstring_deletetable;
execute immediate Pstring_altertable;
execute immediate pstring_inserttable;
execute immediate Pstring_droptable;
end;
3 进一步提炼.将表名称提取成变量名称
create or replace procedure Modify_Table_Structure(table_name in varchar2) as
Pstring_droptable varchar2(2000);
Pstring_createtable varchar2(2000);
Pstring_deletetable varchar2(2000);
Pstring_altertable varchar2(2000);
pstring_inserttable varchar2(2000);
v_count integer;
begin
Pstring_droptable := 'drop table '||table_name||'_BACK';
Pstring_createtable := 'create table '||table_name||'_BACK as select * from '||table_name;
Pstring_deletetable := 'delete from '||table_name;
Pstring_altertable := 'alter table '||table_name|| ' modify sell_money number(10,5)';
pstring_inserttable :=
'insert into '||table_name|| ' (id, busiman_name, sell_date, product_type, sell_money)
select id, busiman_name, sell_date, product_type, sell_money
from '||table_name||'_BACK' ; select count(*)
into v_count
from user_tables
where table_name = 'table_name'||'_BACK';
dbms_output.put_line('v_count 1 '||v_count);
if (v_count > 0) then
execute immediate Pstring_droptable;
dbms_output.put_line('v_count 2 '||v_count);
end if;
dbms_output.put_line(Pstring_droptable);
dbms_output.put_line(Pstring_createtable);
dbms_output.put_line(Pstring_deletetable);
dbms_output.put_line(Pstring_altertable);
dbms_output.put_line(pstring_inserttable);
execute immediate Pstring_createtable;
execute immediate Pstring_deletetable;
execute immediate Pstring_altertable;
execute immediate pstring_inserttable;
execute immediate Pstring_droptable;
end;
4 执行成功!
call Modify_Table_Structure('contract_kangjia');
练习七 Procedure中使用DDL的更多相关文章
- 九、dbms_ddl(提供了在PL/SQL块中执行DDL语句的方法)
1.概述 作用:提供了在PL/SQL块中执行DDL语句的方法,并且也提供了一些DDL的特殊管理方法. 2.包的组成 1).alter_compile说明:用于重新编译过程.函数和包语法:dbms_dd ...
- MySQL中的DDL,DML
MySQL中的DDL,DMLDDL:数据定义语言: CREATE,ALTER,DROP DB组件:数据库.表.索引.视图.用户.存储过程.存储函数.触发器.事件调度器等 CR ...
- 关于PLSQL中的一些问题总结:在PLSQL中书写DDL等
关于问题前导,使用的数据表中涉及到的字段和类型: 在PLSQL中create.drop.truncate等DDL是没有办法直接执行的. 必须要使用: Execute immediate 'DDL语句' ...
- percona-toolkit中在线ddl
percona-toolkit中在线ddl percona-toolkit工具提供了一组用于mysql操作的工具,比如主从复制,在线更改mysql表ddl等 一.安装1.安装perl(略)2.BI&a ...
- (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...
- 在Hive中执行DDL之类的SQL语句时遇到的一个问题
在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...
- iOS流布局UICollectionView系列七——三维中的球型布局
摘要: 类似标签云的球状布局,也类似与魔方的3D布局 iOS流布局UICollectionView系列七——三维中的球型布局 一.引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑 ...
- SQLDataSet中执行DDL语句
在SQLDataSet中执行我们输入的DDL语句,并观察执行结果. 这里为了省输入的时间,从先输好的记事本中复制的SQL语句.效果图: ******************************** ...
- Oracle中的DDL,DML,DCL总结
转自http://blog.csdn.net/w183705952/article/details/7354974 DML(Data Manipulation Language,数据操作语言):用于检 ...
随机推荐
- Android adb from work ---three
转接from work --two 0.查看Android的物理存储空间df adb shell df -h 表示以MB单位查看存储使用情况 1.在Android设备中创建指定大小的文件(也能测试其I ...
- 1,环境的搭建,angular
也是学习一些皮毛,只是把这些经验记录下来而已. 至于angular有什么好处,或者有什么是什么,我就不多做介绍,自己可以去百度,肯定能找到更为详细的. 我使用的是google提供的angualr-cl ...
- 小学生都看得懂的C语言入门(6): 字符串
1.字符用 char 表示 #include<stdio.h> int main() { char c; char d; c=; d='; if (c==d){ printf(" ...
- 用来表达更复杂的sql语句!!!!!extra 原声sql
extra 用来表达更复杂的sql语句!!!!! extra可以指定一个或多个 参数,例如 select, where or tables. 这些参数都不是必须的,但是你至少要使用一个!要注意这些额外 ...
- 开始接触python
1.什么是语言? 语言是一个事物与另一个事物交流的介质 python是人与计算机交流的介质 能够被计算机所识别的表达方式即是编程语言 2.什么是编程? 编程就是程序员将想让计算机做的事情用编程语言表达 ...
- MySQL架构及SQL语句
MySQL基础: 单进程多线程: 用户连接:连接线程 官方组件架构: MySQL的数据文件类型: 数据文件.索引文件 重做日志.撤销日志.二进制日志.错误日志.查询日志.慢查询日志.中继日志 MySQ ...
- 充分认识Mysql
使用开源产品是一种潮流.在使用之前,我们首先需要对Mysql 有一定的了解,特别是Mysql 的缺点.只有了解其缺点后,我们才知道,能不能真正的应用到我们的业务场景中去. 2.1 Mysql 数据库简 ...
- azkaban使用
新建一个text文件,a.job,打包成zip包传到azkaban即可 方式1:job流 1. a.job内容范例: type=command command=hive shell command ...
- Leetcode刷题第004天
class Solution { public: int findKthLargest(vector<int>& nums, int k) { , nums.size()-, k) ...
- VS2017使用文档
参考链接:https://docs.microsoft.com/zh-cn/visualstudio/debugger/?view=vs-2017