Ibm midrange 如何在AS400中创建自定义项

Ibm midrange 如何在AS400中创建自定义项,ibm-midrange,iseries-navigator,udf,Ibm Midrange,Iseries Navigator,Udf,我有一个UDF代码,它以create function… 但是我不知道把它放在iseries navigator屏幕的什么地方。有人能帮我吗?谷歌没有帮助扩展数据库分支,以显示系统上的所有数据库 那么 右键单击数据库并选择运行SQL脚本 或 展开数据库以显示模式 右键单击所选架构,然后选择新建-->函数-->SQL 第一个可能是你最好的选择,因为你似乎有完整的来源 展开数据库分支以显示系统上的所有数据库 那么 右键单击数据库并选择运行SQL脚本 或 展开数据库以显示模式 右键单击所

我有一个UDF代码,它以
create function…


但是我不知道把它放在iseries navigator屏幕的什么地方。有人能帮我吗?谷歌没有帮助扩展数据库分支,以显示系统上的所有数据库

那么

  • 右键单击数据库并选择运行SQL脚本

  • 展开数据库以显示模式
  • 右键单击所选架构,然后选择新建-->函数-->SQL

第一个可能是你最好的选择,因为你似乎有完整的来源

展开数据库分支以显示系统上的所有数据库

那么

  • 右键单击数据库并选择运行SQL脚本

  • 展开数据库以显示模式
  • 右键单击所选架构,然后选择新建-->函数-->SQL

第一个可能是你最好的选择,因为你似乎有完整的来源

将其作为一个整体输入到STRSQL窗口中。。例如(下文为INSTRB UDF)

创建函数INSTRB(C1 VarChar(4000)、C2 VarChar(4000)、N整数、M整数)
返回整数
特异性内酰胺基
语言SQL
包含SQL
没有外部行动
确定性
开始原子化
声明Pos、R、C2L整数;
设置C2L=长度(C2);
如果N>0,则
设置(位置,R)=(N,0);
当R0时
设置位置=定位(C2,C1,位置);
如果位置>0,则
设置(位置,R)=(位置+1,R+1);
如果结束;
结束时;
返回(位置1)*(1号符号(M-R));
其他的
设置(位置,R)=(长度(C1)+N,0);
当R0时
如果SUBSTR(C1,位置,C2L)=C2,则
设置R=R+1;
如果结束;
设置位置=位置-1;
结束时;
返回(位置+1)*(1号符号(M-R));
如果结束;
结束!
它应该输出
函数INSTRB是在QGPL中创建的。


它是可重用的

将其作为一个整体输入STRSQL窗口。。例如(下文为INSTRB UDF)

创建函数INSTRB(C1 VarChar(4000)、C2 VarChar(4000)、N整数、M整数)
返回整数
特异性内酰胺基
语言SQL
包含SQL
没有外部行动
确定性
开始原子化
声明Pos、R、C2L整数;
设置C2L=长度(C2);
如果N>0,则
设置(位置,R)=(N,0);
当R0时
设置位置=定位(C2,C1,位置);
如果位置>0,则
设置(位置,R)=(位置+1,R+1);
如果结束;
结束时;
返回(位置1)*(1号符号(M-R));
其他的
设置(位置,R)=(长度(C1)+N,0);
当R0时
如果SUBSTR(C1,位置,C2L)=C2,则
设置R=R+1;
如果结束;
设置位置=位置-1;
结束时;
返回(位置+1)*(1号符号(M-R));
如果结束;
结束!
它应该输出
函数INSTRB是在QGPL中创建的。


它是可重复使用的

我使用的是黑白屏幕。不确定菜单在哪里。我一直在玩它。但别担心,我已经找到了答案。投票赞成effort@LuigiMackenzieC.Brito如果您有权创建SQL函数,那么您真的应该在数据库工作中使用iNavigator,而不是使用绿色屏幕。您可以一次将文本部分复制/粘贴到绿色屏幕上几行,但如果函数的行数超过16行左右,或者任何一行的字符数超过75个左右,则会变得非常棘手。如果您刚开始使用DB2 SQL on i,绿屏有太多的限制,需要一些经验和学习才能克服。@LuigiMackenzieC.Brito…您的OP说的是“iseries navigator screen”,这意味着IBM iseries Access for Windows的IBM iseries navigator组件。这里的图片:(注意这些都是旧名称,大约在v5r4或之前)“绿色和黑色屏幕”意味着一个简单的5250会话。那么它是哪一个呢?@Charles它实际上是一个黑/绿屏幕,文本是绿色的,背景是黑色的。是的,这是真的,一次复制粘贴几行文本的部分是非常棘手的,我不知道这是否会妨碍数据库工作,尽管我使用的是黑白屏幕。不确定菜单在哪里。我一直在玩它。但别担心,我已经找到了答案。投票赞成effort@LuigiMackenzieC.Brito如果您有权创建SQL函数,那么您真的应该在数据库工作中使用iNavigator,而不是使用绿色屏幕。您可以一次将文本部分复制/粘贴到绿色屏幕上几行,但如果函数的行数超过16行左右,或者任何一行的字符数超过75个左右,则会变得非常棘手。如果您刚开始使用DB2 SQL on i,绿屏有太多的限制,需要一些经验和学习才能克服。@LuigiMackenzieC.Brito…您的OP说的是“iseries navigator screen”,这意味着IBM iseries Access for Windows的IBM iseries navigator组件。这里的图片:(注意这些都是旧名称,大约在v5r4或之前)“绿色和黑色屏幕”意味着一个简单的5250会话。那么它是哪一个呢?@Charles它实际上是一个黑/绿屏幕,文本是绿色的,背景是黑色的。是的,这是真的,一次复制粘贴几行文本的部分是非常棘手的,但我不知道这是否会对数据库工作造成影响
CREATE FUNCTION INSTRB (C1 VarChar(4000), C2 VarChar(4000), N integer, M integer)
 RETURNS Integer
 SPECIFIC INSTRBOracleBase
 LANGUAGE SQL
 CONTAINS SQL
 NO EXTERNAL ACTION
 DETERMINISTIC
BEGIN ATOMIC
DECLARE Pos, R, C2L Integer;

SET C2L = LENGTH(C2);

IF N > 0 THEN
   SET (Pos, R) = (N, 0);
   WHILE R < M AND Pos > 0 DO
      SET Pos = LOCATE(C2,C1,Pos);
         IF Pos > 0 THEN
         SET (Pos, R) = (Pos + 1, R + 1);
      END IF;
   END WHILE;

   RETURN (Pos - 1)*(1-SIGN(M-R));
ELSE
   SET (Pos, R) = (LENGTH(C1)+N, 0);
   WHILE R < M AND Pos > 0 DO
      IF SUBSTR(C1,Pos,C2L) = C2 THEN
         SET R = R + 1;
      END IF;
      SET Pos = Pos - 1;
   END WHILE;

   RETURN (Pos + 1)*(1-SIGN(M-R));
END IF;

END!