远程数据库之间的拷贝表

[复制链接]
查看11 | 回复7 | 2006-4-17 13:46:34 | 显示全部楼层 |阅读模式
需求是这样子的。
每天的某一时间:从远程的一个数据库上把另外一台数据库上的某个表复制到本地,表名要能反映日期信息。我是这样做的。
建立一个TEXT.SQL文件。
然后在计划任务中执行这个SQL文件。
TEXT.SQL的内容如下:
declare
v_date date;
begin
select sysdate into v_date from dual;
create tabel test||v_date as select * from remotetest@test;
/*TEST是数据库链*/
end;
/
但是执行出错。
PLS-00103 :出现符号"create"在需要下列之一时:
begin case
declare end exception exit for goto if loop mod null pragma
raise return select update while with
pipe
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
DDL语句不能直接这样写的,
用EXECUTE IMMEDIATE 'CREATE TABLE ..........'
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
修改了还是出错
declare
*
error 位于第1行
ora-00922 :缺少或无效选项
ora-06512:在LINE 5
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
变量类型声明出错了,你这样:
declarev_date varchar2(10);
begin
select to_char(sysdate,'yyyymmdd') into v_date from dual;
EXECUTE IMMEDIATE‘create table test'||'v_date as select * from remotetest@test’;
end;
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
最初由 rebecca_xt 发布
[B]修改了还是出错
declare
*
error 位于第1行
ora-00922 :缺少或无效选项
ora-06512:在LINE 5 [/B]

把sql语句贴出来看看.
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
呵呵,那得看你是怎么改的乐。你根本没有自己认真调试!
低级错误有:
1、把table写成了tabel
2、把字符型和日期型一起处理了。这样不是不可以,系统能够自动处理,但这样不好。况且,如果你真想这么做的话,完全没有必要再用一个变量来处理,直接用sysdate就行。
不知道你后来是怎么改的。我帮你改好了!
declare
v_temp varchar2(256); -------------这样写清楚一些,也便于调试
begin
v_temp := 'create table test'||to_char(sysdate,'yyyymmdd')

||' as select * from remotetest@test';------------------这里不要用多余的分号
execute immediate v_temp;
end;
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
楼上的。,就是按你上面的代码写也是同样的错误呀,你测试通过了吗?
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
text.sql:
define DAY = &1
create tabel test&DAY as select * from remotetest@test;
exit
run:
DAY=`date +%y%m%d`
sqlplus test/test text $DAY
以上在unix环境中能运行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行