SQLRPGLE 静态SQL和动态SQL

静态SQL

静态sql分non-select和select两种。non-select包括insert、update和delete

静态non-select, 变量前加冒号

C/EXEC SQL
C+ UPDATE HTXAFP/CSCUSTP SET C1CSCN =‘SARA1’
C+ WHERE C1CSBR = 1 AND C1CSSR = :W0CONT
C/END-EXEC
IN在这里插入图片描述

动态sql

动态sql分non-select和select两种。non-select包括insert、update和delete。

动态sql最重要的是动态sql的合成。合成动态sql有两种方法。
第一种是直接用字符串合成,例子如下:
eg1.
在这里插入图片描述
这里最重要的是红色部分。一定要注意单引号的数量。

eg2:
字符型变量: 因为是字符型变量,用单引号把字符的引号引起来
在这里插入图片描述
在这里插入图片描述

第二种是在sql中预留要填充的位置,例子如下:
sqlstm = 'update ptrlib/custom ’ +
'SET NAME = ? WHERE ’ +
‘CUST = ?’
这里与上面不同的是具体的值是用?来代替的。

下面是两种方法的具体实现:
第一种
d sqlstm s 1024a inz(blanks) VARYING
d custc s 5a inz(‘A0001’)
d namec s 20a inz(‘Lucy and Lily’)
c eval sqlstm = ‘UPDATE PTRLIB/CUSTOM ’ +
c ‘SET NAME = ‘’’+%trim(namec)+’’’’+
c ’ WHERE CUST = ‘’’+%trim(custc)+’’’’
c
***************************************************
c* run this sql once,you can skip prepare *
c*/exec sql *
c*+ PREPARE S1 FROM :sqlstm *
c*/end-exec *
c****************************************************
c/exec sql
c+ EXECUTE IMMEDIATE :sqlstm
c/end-exec
c*
c seton lr
c return

第二种
d sqlstm s 1024a inz(blanks) VARYING
d custc s 5a inz(‘A0001’)
d namec s 20a inz(blanks)
c eval sqlstm = 'update ptrlib/custom ’ +
c 'SET NAME = ? WHERE ’ +
c ‘CUST = ?’
c/exec sql
c+ PREPARE s1 FROM :sqlstm
c/end-exec
c

c eval namec = ‘lily’
c

c/exec sql
c+ EXECUTE s1 USING :namec,:custc
c/end-exec
c*
c seton lr
c return

要是执行select的话需要使用cursor。例子如下
D*
D sqlstm S 1024A VARYING
D file S 21A inz(‘ptrlib/custom’)
D count S 10p 0 inz(zero)
C

C eval sqlstm = 'select count() from ’ +
C %trim(file)
C

C/EXEC SQL
C+ prepare s1
C+ from :sqlstm
C/END-EXEC
C*
C/EXEC SQL
C+ declare c1
C+ cursor for s1
C/END-EXEC
C*
C/EXEC SQL
C+ open c1
C/END-EXEC
C*
C/EXEC SQL
C+ FETCH c1 INTO :count
C/END-EXEC
c if SQLCOD = ZERO
c count dsply
c endif
C/EXEC SQL
C+ CLOSE c1
C/END-EXEC
C

C SETON lr
C RETURN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值