首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对序列名执行PL/SQL函数参数替换?

如何对序列名执行PL/SQL函数参数替换?
EN

Stack Overflow用户
提问于 2016-04-15 00:32:35
回答 1查看 193关注 0票数 0

快把我逼疯了!

我正在调用一个PL/SQL函数GetNextVal,传入一个变量ProgCode (如"SLC")。函数调用许多匹配的预先存在的序列之一,在本例中是SLC_seq.NextVal。在下一次调用时,传递另一个ProgCode (例如"KLY"),但是函数返回第一个ProgCode序列的nextval?职能:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION getNextVal(ProgCode IN VARCHAR2)
RETURN NUMBER
IS next_val NUMBER;
BEGIN
    SELECT &ProgCode._seq.NextVal INTO next_val FROM DUAL;
RETURN(next_val); 
END;
/

快速循环测试脚本:

代码语言:javascript
复制
  declare
  type table_varchars is table of varchar2(4);
  var_table_varchar table_varchars;
  begin
  var_table_varchar := table_varchars('KLY','LGC','NLC','SLC');
  for e in 1..var_table_varchar.count loop
   for j in 1..10 loop
   dbms_output.put_line(var_table_varchar(e) || ': ' ||
   getnextval(var_table_varchar(e)));
  end loop;
 end loop;
 end;
/

测试输出:

代码语言:javascript
复制
KLY: 201
KLY: 202
KLY: 203
KLY: 204
KLY: 205
KLY: 206
KLY: 207
KLY: 208
KLY: 209
KLY: 210
LGC: 211
LGC: 212
LGC: 213
LGC: 214
LGC: 215
LGC: 216
LGC: 217
LGC: 218
LGC: 219
LGC: 220
NLC: 221
NLC: 222
NLC: 223
NLC: 224
NLC: 225
NLC: 226
NLC: 227
NLC: 228
NLC: 229
NLC: 230
SLC: 231
SLC: 232
SLC: 233
SLC: 234
SLC: 235
SLC: 236
SLC: 237
SLC: 238
SLC: 239
SLC: 240

我做错了什么?我需要取消函数中的&ProgCode吗?

Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 01:48:06

  • 首先,您不能在PL/SQL中使用替换变量(&),因为它是SQL*Plus的独占特性。因此,您必须使用绑定变量,:
  • 其次,您不必在函数或过程中设置值,这就是为什么要获得第一个序列的下一个值的原因,因为当您将函数复杂时,将ProgCode设置为'KLY‘。您必须使用参数,因为它在块中。
  • 试试这个:

create or replace FUNCTION getNextVal(ProgCode IN VARCHAR2) RETURN VARCHAR2 IS next\_val VARCHAR2(200); v\_sql VARCHAR2(2000); BEGIN v\_sql := 'SELECT '||ProgCode||'\_seq.nextval FROM DUAL'; --dbms\_output.put\_line(v\_sql); EXECUTE IMMEDIATE v\_sql INTO NEXT\_VAL; RETURN NEXT\_VAL; END;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36636362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档