常用PLSQL子程序
2016-04-09 17:17
267 查看
01.清空回收站
begin
EXECUTE IMMEDIATE 'purge recyclebin';
end;
/
02.截断表
declare
begin
execute immediate 'truncate table person_bak2';
end;
/
03.修改表列可以为空
--修改时间:2014年9月1日
--修改内容:修改表BT_SALE_CONTRACT字段TRANS_TIME允许为空
--修改原因:销售合同导入时报TRANS_TIME为NULL不能插入
DECLARE
VN_NULLABLE VARCHAR2(1);
BEGIN
SELECT nullable
INTO VN_NULLABLE
FROM user_tab_columns
WHERE table_name = 'BT_SALE_CONTRACT'
AND column_name = 'TRANS_TIME';
IF VN_NULLABLE = 'N' THEN
EXECUTE IMMEDIATE ' ALTER TABLE BT_SALE_CONTRACT MODIFY TRANS_TIME DATE NULL ';
END IF;
COMMIT;
END;
/
04.修改列列长度(字符型,只允许变长,不允许变短)
--修改时间:2014年9月3日
--修改内容:修改表BT_BUY_DETAIL字段PRODUCT_NAME的长度
-- 修改表BT_BUY_FPRECORD 字段PRODUCT_NAME的长度
--修改原因:导入时报其字段的长度不够
--修改产品名称字段地,采购明细导入报其字段的长度不够
alter table BT_BUY_DETAIL modify(PRODUCT_NAME varchar2(500));
--修改产品名称字段,发票表导入报其字段的长度不够
alter table BT_BUY_FPRECORD modify(PRODUCT_NAME varchar2(500));
commit;
05.创建表
--修改人:易小群
--修改内容:新增预投产品/返修产品库,在招标采购时可供选择
DECLARE
VC_STR VARCHAR2(5000);
VN_COUNT NUMBER;
BEGIN
--查看现有系统是否有BT_PRODUCT_MODEL表
SELECT COUNT(*)
INTO VN_COUNT
FROM USER_TABLES
WHERE TABLE_NAME = 'BT_PRODUCT_MODEL';
--如果没有则新增表,如果有就不处理
IF VN_COUNT < 1 THEN
VC_STR := ' create table BT_PRODUCT_MODEL
(
product_model_id NUMBER not null,
product_code VARCHAR2(30),
product_name VARCHAR2(30),
product_type VARCHAR2(30),
product_desc VARCHAR2(100),
constraint PK_PRODUCT_MODEL_ID primary key (PRODUCT_MODEL_ID)
)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
06.表列增加字段
--修改时间:2014-9-16
--修改内容:销售合同表增加合同标记
DECLARE
VN_COUNT NUMBER;
VC_STR VARCHAR2(1000);
BEGIN
--查看该表中该字段是否存在
SELECT COUNT(*)
INTO VN_COUNT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'BT_SALE_CONTRACT' AND COLUMN_NAME = 'CONTRACTFLAG';
IF VN_COUNT < 1 THEN
VC_STR := ' ALTER TABLE BT_SALE_CONTRACT ADD CONTRACTFLAG VARCHAR2(30)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
07.开启回收站
begin
execute immediate 'alter session set recyclebin=on';
end;
/
08.创建序列
DECLARE
VC_STR VARCHAR2(5000);
VN_COUNT NUMBER;
BEGIN
SELECT COUNT(*)
INTO VN_COUNT
FROM ALL_SEQUENCES
WHERE SEQUENCE_NAME = 'AUDIT_SEQ';
IF VN_COUNT < 1 THEN
VC_STR := 'CREATE SEQUENCE audit_seq
START WITH 1000
INCREMENT BY 1
NOMAXVALUE
NOCYCLE NOCACHE;';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
09.解锁用户
SQL> SELECT OBJECT_NAME,S.SID, S.SERIAL#
2 FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
3 WHERE L.OBJECT_ID = O.OBJECT_ID
4 AND L.SESSION_ID = S.SID;
OBJECT_NAME
-----------------------------------------------------------------------
SID SERIAL#
---------- ----------
BT_USER
132 37
SQL> alter system kill session '132,37';
系统已更改。
SQL> SELECT OBJECT_NAME,S.SID, S.SERIAL#
2 FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
3 WHERE L.OBJECT_ID = O.OBJECT_ID
4 AND L.SESSION_ID = S.SID;
未选定行
SQL>
SQL注意
各位在写SQL脚本的时候注意下面的情况:
1、SQL脚本中单引号中嵌套单引号问题,如:需要在一个字段中插入字符串"ab'1'cd",不能写成'ab'1'cd',需要写成'ab''1''cd'
2、SQL遇到字符串中有取地址符&问题,需要修改成'||'&'||' 例如:'abc&def' 需要修改成'abc'||'&'||'def'
或使用函数CHR(38)
SQL> select chr(38) from dual;
C
-
&
说明:本人于ITEYE创建于2013年,现转移到CSDN
begin
EXECUTE IMMEDIATE 'purge recyclebin';
end;
/
02.截断表
declare
begin
execute immediate 'truncate table person_bak2';
end;
/
03.修改表列可以为空
--修改时间:2014年9月1日
--修改内容:修改表BT_SALE_CONTRACT字段TRANS_TIME允许为空
--修改原因:销售合同导入时报TRANS_TIME为NULL不能插入
DECLARE
VN_NULLABLE VARCHAR2(1);
BEGIN
SELECT nullable
INTO VN_NULLABLE
FROM user_tab_columns
WHERE table_name = 'BT_SALE_CONTRACT'
AND column_name = 'TRANS_TIME';
IF VN_NULLABLE = 'N' THEN
EXECUTE IMMEDIATE ' ALTER TABLE BT_SALE_CONTRACT MODIFY TRANS_TIME DATE NULL ';
END IF;
COMMIT;
END;
/
04.修改列列长度(字符型,只允许变长,不允许变短)
--修改时间:2014年9月3日
--修改内容:修改表BT_BUY_DETAIL字段PRODUCT_NAME的长度
-- 修改表BT_BUY_FPRECORD 字段PRODUCT_NAME的长度
--修改原因:导入时报其字段的长度不够
--修改产品名称字段地,采购明细导入报其字段的长度不够
alter table BT_BUY_DETAIL modify(PRODUCT_NAME varchar2(500));
--修改产品名称字段,发票表导入报其字段的长度不够
alter table BT_BUY_FPRECORD modify(PRODUCT_NAME varchar2(500));
commit;
05.创建表
--修改人:易小群
--修改内容:新增预投产品/返修产品库,在招标采购时可供选择
DECLARE
VC_STR VARCHAR2(5000);
VN_COUNT NUMBER;
BEGIN
--查看现有系统是否有BT_PRODUCT_MODEL表
SELECT COUNT(*)
INTO VN_COUNT
FROM USER_TABLES
WHERE TABLE_NAME = 'BT_PRODUCT_MODEL';
--如果没有则新增表,如果有就不处理
IF VN_COUNT < 1 THEN
VC_STR := ' create table BT_PRODUCT_MODEL
(
product_model_id NUMBER not null,
product_code VARCHAR2(30),
product_name VARCHAR2(30),
product_type VARCHAR2(30),
product_desc VARCHAR2(100),
constraint PK_PRODUCT_MODEL_ID primary key (PRODUCT_MODEL_ID)
)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
06.表列增加字段
--修改时间:2014-9-16
--修改内容:销售合同表增加合同标记
DECLARE
VN_COUNT NUMBER;
VC_STR VARCHAR2(1000);
BEGIN
--查看该表中该字段是否存在
SELECT COUNT(*)
INTO VN_COUNT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'BT_SALE_CONTRACT' AND COLUMN_NAME = 'CONTRACTFLAG';
IF VN_COUNT < 1 THEN
VC_STR := ' ALTER TABLE BT_SALE_CONTRACT ADD CONTRACTFLAG VARCHAR2(30)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
07.开启回收站
begin
execute immediate 'alter session set recyclebin=on';
end;
/
08.创建序列
DECLARE
VC_STR VARCHAR2(5000);
VN_COUNT NUMBER;
BEGIN
SELECT COUNT(*)
INTO VN_COUNT
FROM ALL_SEQUENCES
WHERE SEQUENCE_NAME = 'AUDIT_SEQ';
IF VN_COUNT < 1 THEN
VC_STR := 'CREATE SEQUENCE audit_seq
START WITH 1000
INCREMENT BY 1
NOMAXVALUE
NOCYCLE NOCACHE;';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
/
09.解锁用户
SQL> SELECT OBJECT_NAME,S.SID, S.SERIAL#
2 FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
3 WHERE L.OBJECT_ID = O.OBJECT_ID
4 AND L.SESSION_ID = S.SID;
OBJECT_NAME
-----------------------------------------------------------------------
SID SERIAL#
---------- ----------
BT_USER
132 37
SQL> alter system kill session '132,37';
系统已更改。
SQL> SELECT OBJECT_NAME,S.SID, S.SERIAL#
2 FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
3 WHERE L.OBJECT_ID = O.OBJECT_ID
4 AND L.SESSION_ID = S.SID;
未选定行
SQL>
SQL注意
各位在写SQL脚本的时候注意下面的情况:
1、SQL脚本中单引号中嵌套单引号问题,如:需要在一个字段中插入字符串"ab'1'cd",不能写成'ab'1'cd',需要写成'ab''1''cd'
2、SQL遇到字符串中有取地址符&问题,需要修改成'||'&'||' 例如:'abc&def' 需要修改成'abc'||'&'||'def'
或使用函数CHR(38)
SQL> select chr(38) from dual;
C
-
&
说明:本人于ITEYE创建于2013年,现转移到CSDN
相关文章推荐
- mongoDB--初识mongoDB&&安装过程
- Redis源码解析:14Redis服务器与客户端间的交互
- MS-Sqlserver的Timestamp不可转换成Datetime
- MySQL(help?)
- MySQL(help?)
- Ubuntu下启动、停止、重启MySQL,查看错误日志命令大全.note
- MySQL常用语句一、连接MySQL格式:mysql-h主机地址-u用户名-p用户密
- powerdesigner逆向工程,从数据库导出PDM
- SQL Sever 2008 R2 安装出错的一种解决办法
- sql server数据库添加记录
- 数据库事务
- MySQL基本概述
- Mysql中事务隔离级详解
- SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名
- mongodb数据库备份导入导出数据
- 使用命令解锁用户。命令为:alter user username account unlock;
- mysql数据库的各种类型的文件简述
- PL/SQL练习题三(分析函数)
- 数据库系统原理设计--论坛系统
- powerDesigner 连接Oracle 报Unable to connect SQLState=08004 解决方法