Oracle-如何在循环中附加值并访问外部循环?

发布于 2025-02-09 12:57:39 字数 502 浏览 3 评论 0原文

我的光标记录将就像以下

队列步骤
1A
2B
3C
4D
5R
 循环
  将cusor1获取到rec1
  当找不到cursor1时退出
  strval:='val ='|| rec1.queue ||' '|| rec1.Steps;
结束循环;
 

我期望的输出是

val = 1a 2b 3c 4d 5r

My cursor records will be like this

Queuesteps
1A
2B
3C
4D
5R
Loop
  Fetch cusor1 into rec1
  Exit when cursor1%not found
  strval := 'val =' || rec1.queue||' '||rec1.steps;
End loop;

The output I am expecting is

Val = 1A 2B 3C 4D 5R

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁的新欢旧爱 2025-02-16 12:57:39

跳过光标并使用listAgg

DECLARE
  strval VARCHAR2(4000);
BEGIN
  SELECT 'Val = ' || LISTAGG(queue || steps, ' ') WITHIN GROUP (ORDER BY queue)
  INTO   strval
  FROM   table_name;

  DBMS_OUTPUT.PUT_LINE(strval);
END;
/

如果您必须使用光标,则:

DECLARE
  CURSOR cursor1 IS
    SELECT queue, steps
    FROM   table_name
    ORDER BY queue;

  strval  VARCHAR2(4000) := 'Val =';
BEGIN
  FOR rec IN cursor1 LOOP
    strval := strval || ' ' || rec.queue|| rec.steps;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(strval);
END;
/

两者都输出:

  val = 1a 2b 3c 4d 5e
 

db<> fiddle

Skip the cursor and use LISTAGG:

DECLARE
  strval VARCHAR2(4000);
BEGIN
  SELECT 'Val = ' || LISTAGG(queue || steps, ' ') WITHIN GROUP (ORDER BY queue)
  INTO   strval
  FROM   table_name;

  DBMS_OUTPUT.PUT_LINE(strval);
END;
/

If you must use a cursor then:

DECLARE
  CURSOR cursor1 IS
    SELECT queue, steps
    FROM   table_name
    ORDER BY queue;

  strval  VARCHAR2(4000) := 'Val =';
BEGIN
  FOR rec IN cursor1 LOOP
    strval := strval || ' ' || rec.queue|| rec.steps;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(strval);
END;
/

Which both output:

Val = 1A 2B 3C 4D 5E

db<>fiddle here

夜未央樱花落 2025-02-16 12:57:39

尝试下面尝试。

Loop 
Fetch cusor1 into rec1 
  Exit when cursor1%not found 
  strval := concat(strval, rec1.queue||''||rec1.steps || ' '); 
End 
loop;

strval := concat('val =', strval)

Try like below.

Loop 
Fetch cusor1 into rec1 
  Exit when cursor1%not found 
  strval := concat(strval, rec1.queue||''||rec1.steps || ' '); 
End 
loop;

strval := concat('val =', strval)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文