Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 什么是<&书信电报;一些文本>&燃气轮机;在甲骨文中_Sql_Oracle_Plsql - Fatal编程技术网

Sql 什么是<&书信电报;一些文本>&燃气轮机;在甲骨文中

Sql 什么是<&书信电报;一些文本>&燃气轮机;在甲骨文中,sql,oracle,plsql,Sql,Oracle,Plsql,我在阅读pl sql的一些博客时发现了这个角色 我在下面的博客中发现了这个字符,它是一个标签,是plsql语法中注释的一个子组。 它通常用于标记循环、游标等 您可以在语句中使用该标签。否则,这只是“评论” 来自Oracle的示例: DECLARE p VARCHAR2(30); n PLS_INTEGER := 37; -- test any integer > 2 for prime BEGIN FOR j in 2..ROUND(SQRT(n))

我在阅读pl sql的一些博客时发现了这个角色


我在下面的博客中发现了这个字符,它是一个标签,是plsql语法中注释的一个子组。

它通常用于标记循环、游标等

您可以在语句中使用该标签。否则,这只是“评论”

来自Oracle的示例:

DECLARE
  p        VARCHAR2(30);
  n        PLS_INTEGER := 37; -- test any integer > 2 for prime
BEGIN
  FOR j in 2..ROUND(SQRT(n)) LOOP
    IF n MOD j = 0 THEN -- test for prime
      p := ' is not a prime number'; -- not a prime number
      GOTO print_now; -- << here is the GOTO
    END IF;
  END LOOP;
  p := ' is a prime number';
<<print_now>> -- << and it executes this
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(n) || p);
END;
/
声明
p-VARCHAR2(30);
n PLS_整数:=37;——测试任何大于2的整数的素数
开始
对于2..ROUND(SQRT(n))循环中的j
如果n MOD j=0,则测试素数
p:='不是质数';--不是质数

现在转到打印;—— 它是一个标签测力仪

<< label delimiter (begin) 


 label delimiter (end) >>
>

正如其他人所说,
是一个名为“some_text”的标签。标签在PL/SQL中不常用,但在各种上下文中都很有用

例如,假设您有几个嵌套循环,执行已达到最内层,代码需要从所有嵌套循环中退出,并在最外层循环之后继续。此处,标签可按以下方式使用:

<<outer_most_loop>>
LOOP
  ...
  <<next_inner_loop>>
  LOOP
    ...
    <<inner_most_loop>>
    LOOP
      ...
      IF something <> something_else THEN
        EXIT outer_most_loop;
      END IF;
      ...
    END LOOP inner_most_loop;
    ...
  END LOOP next_inner_loop;
  ...
END LOOP outer_most_loop;

-- Execution continues here after EXIT outer_most_loop;

something := something_else;
...
不会执行您想要的操作-相反,它将删除PEOPLE表中的每一行;因此,上述内容被解释为

DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = p.lastname;
END;
轰!表中的每一行都会说再见。:-)标签可用于限定变量名称,如下所示:

<<outer>>
DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = outer.lastname;
END;
(EWWWW!像这样的代码感觉太错误了!)


分享和享受。

否则,它只是“注释”。
标签不是注释。是的,人们可能会以这样或那样的方式使用它,但这不是标签的用途。标签是PL/SQL范围和可见性标识符,是执行无条件分支的方法(如您所演示的)。使用标签打破不同级别循环的文档,以及同一章中标签使用的其他参考。(作为进一步的例子,不涉及“评论”讨论)。@Patrickhoffman-是的,我不是指“评论”的事情,我同意你的观点,它们可以这样使用,并且在例子中。这是否是对目的的轻微滥用,还有一个单独的讨论*8-)这只是给OP更多的例子。@Nisarmohamed:是的。OP(原始海报)关于OP提供的特定示例,是的,这些标签似乎起到了评论的作用@Nisarmohamed,但应记住标签是标识符,并遵守标识符的命名规则(简单地说,
1label_name
不是有效的标签名称)。
DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = p.lastname;
END;
<<outer>>
DECLARE
  lastname VARCHAR2(100) := 'JARVIS';
BEGIN
  DELETE FROM PEOPLE p
    WHERE p.LASTNAME = outer.lastname;
END;
FUNCTION SOME_FUNC RETURN NUMBER
IS
  SOMETHING       NUMBER := 1;
  SOMETHING_ELSE  NUMBER := 42;
BEGIN
  IF SOMETHING <> SOMETHING_ELSE THEN
    GOTO HECK;
  END IF;

  RETURN 0;

  <<HECK>>

  RETURN -1;
END;