Sql 什么是<&书信电报;一些文本>&燃气轮机;在甲骨文中
我在阅读pl 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))
我在下面的博客中发现了这个字符,它是一个标签,是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;