我就想在oracle写一个存储过程把A表的字段插入到B表中,能写个详细的的么 可以不带参数
新手求指导:为什么这么写不对?哪里错了找了半天没找出来没弄明白?授之以鱼不如授之于渔;诚心请教!createorreplaceproceduresjcs---这里是创建i...
新手求指导:
为什么这么写不对?哪里错了 找了半天没找出来 没弄明白?授之以鱼不如授之于渔;诚心请教!
create or replace procedure sjcs ---这里是创建
is
V_TABLE_NAME varchar2(40);---我这里想定义一个变量啥的 因为我下面还要加好几个表的插入
BEGIN
V_TABLE_NAME := 'QYZ1';---------这里是当表名等于这个指定表时就做下面的操作
EXECUTE IMMEDIATE 'TRUNCATE TABLE CSZ1';
---这里好像是如果我数据库中没有CSZ1这个表就自动创建这个表 不用手工在创建表。写法是参考网上不知道对不对。
insert into CSZ1(number1 ,number2)--- 这里是我要插入的表的名称、字段
select A02,A07 from QYZ1;-----这里是数据源
END sjcs 展开
为什么这么写不对?哪里错了 找了半天没找出来 没弄明白?授之以鱼不如授之于渔;诚心请教!
create or replace procedure sjcs ---这里是创建
is
V_TABLE_NAME varchar2(40);---我这里想定义一个变量啥的 因为我下面还要加好几个表的插入
BEGIN
V_TABLE_NAME := 'QYZ1';---------这里是当表名等于这个指定表时就做下面的操作
EXECUTE IMMEDIATE 'TRUNCATE TABLE CSZ1';
---这里好像是如果我数据库中没有CSZ1这个表就自动创建这个表 不用手工在创建表。写法是参考网上不知道对不对。
insert into CSZ1(number1 ,number2)--- 这里是我要插入的表的名称、字段
select A02,A07 from QYZ1;-----这里是数据源
END sjcs 展开
2个回答
展开全部
由于不知道你的表结构,我写个简单的例子,你自己按照这个思路根据自己的表结构改一下。
create or replace function fun_save is
v_col varchar2(20); --定义字段变量
begin
select a into v_col from a where rownum = 1; --使用where增加查询条件...,注意使用into为变量赋值时,此条语句查询结果必须小于等于一条,否则会包“返回多行”的错误。
insert into b (a) values (v_col);
commit;
exception when others then
null;
-- 此处增加异常处理
end;
create or replace function fun_save is
v_col varchar2(20); --定义字段变量
begin
select a into v_col from a where rownum = 1; --使用where增加查询条件...,注意使用into为变量赋值时,此条语句查询结果必须小于等于一条,否则会包“返回多行”的错误。
insert into b (a) values (v_col);
commit;
exception when others then
null;
-- 此处增加异常处理
end;
追问
为什么我这样写的不对;请帮忙指导下!
create or replace procedure sjcs
is
V_TABLE_NAME varchar2(40);
BEGIN
V_TABLE_NAME := 'QYZ1';
EXECUTE IMMEDIATE 'TRUNCATE TABLE CSZ1';
insert into CSZ1(number1 ,number2)
select A02,A07 from QYZ1;
END sjcs
追答
语法上没有错误,程序有报错吗?如果有发出来。如果没有,你的问题是不是CSZ1中查不到数据,如果这个问题,那是因为你在最后没有commit,需要些commit,才能提交insert操作。
来自:求助得到的回答
展开全部
create or replace proedure p_test
as
begin
insert into b
select * from A
commit;
end;
as
begin
insert into b
select * from A
commit;
end;
追问
请帮忙解答下上面的追问好么;
追答
create or replace procedure sjcs ---这里是创建
is
V_TABLE_NAME varchar2(40);---我这里想定义一个变量啥的 因为我下面还要加好几个表的插入
BEGIN
V_TABLE_NAME := 'QYZ1';---------这里是当表名等于这个指定表时就做下面的操作
EXECUTE IMMEDIATE 'TRUNCATE TABLE CSZ1';--如果CSZ1表不存在则会报错,并不是表不存在自动创建,建表都是手动的。你可以这样
execute immediate 'create table csz1 (number1 number,number2 number)';
--先创建,在truncate
execute immediate 'truncate table csz1';
--如果你是在这过程里面动态创建的表,在下面insert的时候也必须用execute immediate 语句执行
--如:
execute immediate 'insert into csz1 (number1,number2) select a02,a07 from QYZ1';
commit;
--如果QYZ1要用变量的形式,哪么:
execute immediate 'insert into csz1 (number1,number2) select a02,a07 from '||V_TABLE_NAME;
commit;
--这样就OK了
--insert into CSZ1(number1 ,number2)--- 这里是我要插入的表的名称、字段
--select A02,A07 from QYZ1;-----如果QYZ1这个表不存在也会报错。
END sjcs
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询