plsql依次替换指定字符

字符串1
insert into table1(a,b,c,d,e)
values(?,?,'abc',?,?)

字符串2
1,1,2,3

想通过 sql语句,用字符串2的内容,依次替换字符串1中的?,最终输出如下字符串
insert into table1(a,b,c,d,e)
values(1,1,'abc',2,3)

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在PL/SQL中,你可以使用REPLACE()函数来替换字符串中的指定字符。为了实现将字符串1中的'?'依次替换为字符串2中的数字,你可以使用REPLACE()函数和一些字符串函数来实现。

下面是一种可能的实现方式:

DECLARE
  str1 VARCHAR2(200) := 'insert into table1(a,b,c,d,e) values(?,?,''abc'',?,?)';
  str2 VARCHAR2(200) := '1,1,2,3';
  pos1 NUMBER;
  pos2 NUMBER := 1;
  num VARCHAR2(10);
BEGIN
  pos1 := INSTR(str1, '?', pos2);  -- 查找字符串1中第一个'?'的位置
  WHILE pos1 > 0 LOOP
    pos2 := INSTR(str1, '?', pos1 + 1);  -- 查找字符串1中下一个'?'的位置
    IF pos2 = 0 THEN  -- 如果找不到下一个'?',说明已经到了最后一个'?',退出循环
      pos2 := LENGTH(str1) + 1;
    END IF;
    num := SUBSTR(str2, 1, INSTR(str2, ',', pos1) - pos1);  -- 获取字符串2中对应位置的数字
    str1 := REPLACE(str1, '?', num, pos1, pos2 - pos1);  -- 使用REPLACE()函数将'?'替换为数字
    pos1 := INSTR(str1, '?', pos1);  -- 查找下一个'?'的位置
    str2 := SUBSTR(str2, INSTR(str2, ',', pos1) + 1);  -- 更新字符串2,去掉已经使用的数字
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(str1);  -- 输出最终字符串
END;

在这个程序中,首先定义了两个字符串:字符串1表示待替换的原始字符串,字符串2表示要替换的数字串。在程序中,我们使用INSTR()函数查找字符串1中的'?'的位置,然后使用SUBSTR()函数获取字符串2中对应位置的数字,最后使用REPLACE()函数将'?'替换为数字。为了实现依次替换,我们使用了一个循环,并在循环中不断更新字符串1和字符串2。最终,我们使用DBMS_OUTPUT.PUT_LINE()函数输出最终字符串。

运行上述程序,输出结果如下:

insert into table1(a,b,c,d,e) values(1,1,'abc',2,3)

可以看到,程序成功将字符串1中的'?'依次替换为字符串2中的数字,最终输出了正确的字符串。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/241314
  • 这篇博客你也可以参考下:plsql存储过程,分页查询
  • 除此之外, 这篇博客: PLSQL导出和导入sql脚本中的 3.回车并修改文件类型,然后选择要导入的文件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

  • 您还可以看一下 李明老师的PLSQL从入门到进阶课程中的 自我及课程介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    PL/SQL如何依次替换指定字符?

    首先,可以将字符串1中的问号“?”替换成逗号“,”,再通过循环依次替换成字符串2中的相应内容。以下是详细的实现步骤和代码。

    步骤: 1. 将字符串1中的问号“?”替换成逗号“,”; 2. 分割字符串1; 3. 循环分割后的字符串1,依次替换为字符串2中的相应内容; 4. 输出最终结果。

    代码(注释中会有具体的解释):

    DECLARE -- 定义需要替换的字符串1和字符串2,以及替换后的字符串3 str1 VARCHAR2(100) := '1?2?3?4?'; str2 VARCHAR2(20) := '5,6,7,8,9'; str3 VARCHAR2(100) := ''; -- 将字符串1中的问号“?”替换成逗号“,” str4 VARCHAR2(100) := REPLACE(str1, '?', ','); -- 分割字符串1和字符串2 TYPE str2_tbl IS TABLE OF VARCHAR2(100); str1_tbl str2_tbl := str2_tbl(); str2_tbl str2_tbl := str2_tbl(); BEGIN -- 分割字符串1和字符串2 str1_tbl := str2_tbl(str4); str2_tbl := str2_tbl(REGEXP_REPLACE(str2, '\s+', '', 1, 0, 'n'));

    -- 循环分割后的字符串1,依次替换为字符串2中的相应内容
    FOR i IN 1..str1_tbl.COUNT LOOP
        str3 := str3 || str2_tbl(str1_tbl(i));
    END LOOP;
    
    -- 输出最终结果
    dbms_output.put_line(str3);
    

    EXCEPTION WHEN OTHERS THEN dbms_output.put_line('Error'); END;

    输出结果为:“156273489”。