pl/sql问题求解

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:59:51
declare
cursor c_table is
select long_id, long_value
from t_long@dblink_test_diana;
v_table t_long%rowtype;
begin
for v_table in c_table loop
insert into t_long(long_id, long_value) values(v_table.long_id, v_table.long_value);
end loop;
commit;
end;

现在需要将其写成一个procedure
将表名字和字段名字做为参数,
如 table_name varchar2: 't_long'
column_name varchar2" 'long_id, long_value'
因该如何写? 求教``

SELECT COLUMN_NAME from DBA_TAB_COLUMNS where table_name='表名'
and date_type='LONG';

表名地方要大写,能选出来这些表里有什么字段
然后再怎么弄还挺麻烦的

在前面加create procedure 过程名(参数1 类型,参数2 类型)
过程和函数内部申明变量不需要declare,否则会报错

create or replace procedure procedurename(tablename varchar2(30),field varchar2(30))

cursor c_table is
select long_id, long_value
from t_long@dblink_test_diana;
v_table t_long%rowtype;
begin
for v_table in c_table loop
insert into t_long(long_id, long_value) values(v_table.long_id, v_table.long_value);
end loop;
commit;
end;

声明一个字符串, 把sql语句拼接起来。
例如
set @sql = 'insert into ' + @t_long + '('+@long_id +',' + @long_value + ') values ( ''' + 值1 + '','''+ 值2 + '')'
exec(@sql)

这样就可以了, 思路告诉你了, 具体的自己写吧。