Oracle简单脚本示例,oracle示例
Oracle简单脚本示例
1.增加表
--修改日期:2014.09.21
--修改人:易小群
--修改内容:新增采购支付情况表
DECLARE
VC_STR VARCHAR2(5000);
VN_COUNT NUMBER;
BEGIN
--查看现有系统是否有BT_PRODUCT_MODEL表
SELECTCOUNT(*)
INTO VN_COUNT
FROM USER_TABLES
WHERE TABLE_NAME ='BT_BUY_PAY';
--如果没有则新增表,如果有就不处理
IF VN_COUNT < 1 THEN
VC_STR := ' create table BT_BUY_PAY
(
id NUMBER not null,
buynumber VARCHAR2(30),
money NUMBER(15,2),
recevietime DATE,
recordtime DATE,
currency VARCHAR2(30),
foreigncurrency NUMBER(15,2),
constraint PK_BT_BUY_PAY_ID primary key (id)
)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
2.增加字段
--修改人:易小群
--修改时间:2014-9-18
--修改内容:采购合同表增加合同所属字段(本部和集团)
DECLARE
VN_COUNT NUMBER;
VC_STR VARCHAR2(1000);
BEGIN
--查看该表中该字段是否存在
SELECTCOUNT(*)
INTO VN_COUNT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME ='BT_BUY_RECORD'AND COLUMN_NAME ='CONTRACTBELONG';
IF VN_COUNT < 1 THEN
VC_STR := ' ALTER TABLE BT_BUY_RECORD ADD CONTRACTBELONG VARCHAR2(30)';
EXECUTE IMMEDIATE VC_STR;
END IF;
END;
3.创建视图
createorreplaceview v_bt_buy_fprecord_ceas
selectdistinct b.corp_code,
c.corp_name,--单位名称
d.buynumber,--采购合同号
b.buyname,--采购合同名称
d.sale_no,--销售合同号
d.product_id,--产品id
d.product_name,--产品名称
d.money,--明细金额
b.htprice,--合同金额
d.out_money,--已付金额
vf.ymoney,--已开发票金额
b.status
from bt_buy_record b
leftjoin bt_corp c
on b.corp_code = c.corp_code
leftjoin bt_buy_detail d
on b.buynumber = d.buynumber
leftjoin (select f.detail_id, sum(f.money)as ymoney
from bt_buy_fprecord f
groupby f.detail_id) vf
on d.id = vf.detail_id
orderby b.corp_code ;
4.修改表的字段允许为空
--修改人:易小群
--修改时间:2014年9月11日
--修改内容:修改表BT_BUY_FPRECORD字段PRODUCE_NAME允许为空
--修改原因:采购合同导入时报PRODUCE_NAME为NULL不能插入
DECLARE
VN_NULLABLE VARCHAR2(1);
BEGIN
SELECT nullable
INTO VN_NULLABLE
FROM user_tab_columns
WHERE table_name ='BT_BUY_FPRECORD'
AND column_name ='PRODUCE_NAME';
--如果不允许为空
IF VN_NULLABLE = 'N'THEN
--更改为允许为空
EXECUTE IMMEDIATE' ALTER TABLE BT_BUY_FPRECORD MODIFY PRODUCE_NAME VARCHAR2(200) NULL ';
END IF;
COMMIT;
END;
5.修改字段长度
--修改人:易小群
--修改时间:2014年9月3日
--修改内容:修改表BT_BUY_DETAIL字段PRODUCT_NAME的长度
--修改原因:导入时报其字段的长度不够
altertable BT_BUY_DETAIL modify(PRODUCT_NAME varchar2(500));
--修改产品名称字段,发票表导入报其字段的长度不够
altertable BT_BUY_FPRECORD modify(PRODUCT_NAME varchar2(500));
commit;
我只能教你大概思路,程序还是得靠自己写啊。同学!
能下发,说明两个库是通的,请问是否使用DBLINK来进行表查询?
如果有,则直接在C库中你 select count(*) from B@dblink_name ;查询。
至于匹配、下发数据你可以用过程,函数。或者SHELL脚本来实现。
补充:
我把你的例子标准化一下:
declare
n_count number(10); --定义变量类型 数值10位
begin
select count(*) into n_count from table;
if n_count =0 then
insert into ...;
end if;
end;
create table student //创建student表
( stuid number(8) primary key, //学生编号 整数 主键
stuname varchar2(20) not null, //学生姓名 变成字符串(最长20) 非空
classid number(8) foreign key references class(classid) // 学生班级编号 整数 外键
)