DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME
2.DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects.
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
DML分成交互型DML和嵌入型DML两类。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种。
需要commit.
SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE
3.DCL(Data Control Language)数据库控制语言 授权,角色控制等
GRANT 授权
REVOKE 取消授权
4.TCL(Transaction Control Language)事务控制语言
SAVEPOINT 设置保存点
ROLLBACK 回滚
SET TRANSACTION
SQL主要分成四部分:
(1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
(2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。
先不说问题,把Alter之类的DDL语句写到SP里面本身是不合理的。
如果以后有人运行这个SP,岂不是会一直出错下去,因为第一次运行之后该列已经在表中存在了
execute immediate 'alter table CF_BI_TEMP_RP02 add (ds varchar2(50))';
DECLARE
v_lower NUMBER :=1;
v_upper NUMBER :=2;
v_sql varchar2(1000);
sql1 varchar2(50);
BEGIN
--add (xxxxx varchar2(30) );
FOR i IN v_lower .. v_upper LOOP
--v_sql:='select * from tables t where t.c_date=:1 and t.name=:2';
v_sql:='alter table CF_BI_TEMP_RP02 add(XXXTest';
v_sql:= v_sql|| i||' varchar2(30) ) ';
dbms_output.put_line(v_sql);
execute immediate v_sql;
END LOOP;
commit;
END;
动态增加字段:
DECLARE
v_lower NUMBER :=12;
v_upper NUMBER :=134;
v_sql varchar2(1000);
sql1 varchar2(50);
BEGIN
FOR i IN v_lower .. v_upper LOOP
v_sql:='alter table CF_BI_TEMP_RP02 add(P';
v_sql:= v_sql||i||' varchar2(50), ';
v_sql:= v_sql||'P'||i||'_VAL'|| ' number(16,2)';
v_sql:=v_sql ||',P'||i||'_DES'|| ' varchar2(50)';
v_sql:=v_sql||')';
dbms_output.put_line(v_sql);
execute immediate v_sql;
END LOOP;
commit;
END;