免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhouhaiming
打印 上一主题 下一主题

怎样SQL存储过程中执行动态SQL语句,急急急!! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-01-08 12:57 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

Law老兄,你的方法我已经试了,不好使啊,有没有知道这个问题的请赶快赐教啊!!

论坛徽章:
0
12 [报告]
发表于 2003-01-08 13:04 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

  你怎么试的?把源代码帖出了来啊!
  不可能啊,我写动态都是用这种方法的啊,都是可以的啊!!

论坛徽章:
0
13 [报告]
发表于 2003-01-08 13:05 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

我查了一下资料,我以为是没有写allowed-SQL语句的原因后来把代码改为
create procedure refresh(in id integer, out errorCode integer, out errorLabel varchar(255))
DYNAMIC RESULT SETS 0
MODIFIES SQL DATA
language sql
P1: begin
  declare SQLCODE integer default 0&#59;
  declare stmt varchar(1024)&#59;

  declare EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
    set errorCode = SQLCODE&#59;

  set errorCode = 0&#59;

  set stmt = 'insert into t_login(F_ID) '||
             'values('||cast(id as char()||')'&#59;
  set errorLabel = 'refresh:The line number is 28.'&#59;
  --使用prepare语句为这个语句生成存取方案
  prepare ps from stmt&#59;
  set errorLabel = 'rerresh:The line number is 31.'&#59;
  --使用execute语句执行动态sql语句
  execute ps using id&#59;

  set errorLable = ''&#59; --当全部sql语句都正确执行时把errorLable变量赋值为空串

end P1  


多了一条allowed-SQL语句
我再编译,还出现相同的问题SQL0198N,怎么回事呢?

论坛徽章:
0
14 [报告]
发表于 2003-01-08 13:11 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

SQL过程的结构如下
CREATE PROCEDURE procedure-name
(parameter-list)
DYNAMIC RESULT SETS number-of-result-sets
allowed-SQL
LANGUAGE SQL
P1: BEGIN
  SQL-procedure-body
END P1

论坛徽章:
0
15 [报告]
发表于 2003-01-08 13:19 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

Law老兄,我按照你的方法编译下面的代码,仍出现相同的问题SQL0198N
create procedure referesh(in odd_table_name varchar(100), in ods_table_name varchar(100))
language sql
P1: begin
declare sSql varchar(1000) &#59;
sSql = 'create table '|| ods_table_name||' like'||' odd_table_name'&#59;
' as select * from ' || odd_table_name &#59;
prepare s1 from sSql&#59;
execute s1&#59;

end P1

论坛徽章:
0
16 [报告]
发表于 2003-01-08 13:58 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

作一个总结:
我知道是怎么回事了,8.1版本的DB2还不完善,相同的代码我在7.1版本下就可以编译通过可在8.1版本下却不行。我跟北京IBM公司的技术人员联系了,他们告诉我他们还没有使用DB2 8.1版本呢,市场上稳定运行的版本为DB2 7.2版本。下面的代码我在DB2 7.1版本下编译通过可在DB2 8.1版本下却不行
create procedure referesh(in odd_table_name varchar(100), in ods_table_name varchar(100))
language sql
P1: begin
declare sSql varchar(1000) &#59;
set sSql = 'create table '|| ods_table_name||' like'||' odd_table_name'&#59;
prepare s1 from sSql&#59;
execute s1&#59;
end P1

论坛徽章:
0
17 [报告]
发表于 2003-01-08 14:10 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

[这个贴子最后由Law在 2003/01/08 02:14pm 编辑]

  你那个create and insert 是不能在db2 v7下面运行的,这个只能在oracle下面用,只能先创建好了,然后再用第二条insert 语句插入进入,不能写在一起!!!

还有,你写错了
sSql = 'create table '|| ods_table_name||' like'||' odd_table_name'&#59;
' as select * from ' || odd_table_name &#59;
prepare s1 from sSql&#59;

没有set 多了一个&#59;号

论坛徽章:
0
18 [报告]
发表于 2003-01-08 14:24 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

Law老兄你很细心啊,我在你回的贴子的上边已经改正了那两个问题,你再看一看

论坛徽章:
0
19 [报告]
发表于 2003-01-08 22:24 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

下面引用由zhouhaiming2003/01/08 01:58pm 发表的内容:
作一个总结:
我知道是怎么回事了,8.1版本的DB2还不完善,相同的代码我在7.1版本下就可以编译通过可在8.1版本下却不行。我跟北京IBM公司的技术人员联系了,他们告诉我他们还没有使用DB2 8.1版本呢,市场上稳定 ...

你不是说编译通过了么?问题解决了啊!

论坛徽章:
0
20 [报告]
发表于 2003-01-10 17:10 |只看该作者

怎样SQL存储过程中执行动态SQL语句,急急急!!

我认为可以实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP