我正在为我的公司编写一系列用Oracle PL/SQL编写的SQL脚本.我遇到了一个基本的脚本,底部附近有一个奇怪的斜线.它以这种方式检入CVS.这是一个纯语法错误还是它有一些我不知道的功能.稍微混淆的脚本:
set serveroutput on size 2000; --PL/SQL block to link ISSN in serial base on a company's ISSN text file declare cursor ItemCursor is select issn is2 from web.obfuscated1 where issn is not null union select eissn is2 from web.obfuscated1 where eissn is not null; cursor ItemCursor1(aIS varchar2) is select obfuscated1_uid from web.obfuscated1 where group_num is null and issn in ( select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS union select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS ) union select obfuscated1_uid from web.obfuscated1 where eissn in ( select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS union select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS ); cursor ItemCursor2(aIS9 varchar2) is select obfuscated1_uid from web.obfuscated1 where issn in ( select distinct issn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 union select distinct eissn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 ) and group_num is null; agroup number(8); processCount number(8); ------------------------------------------------------ -- MAIN BLOCK ----------------------------------- ------------------------------------------------- begin processCount := 0; agroup := null; for itemRec in ItemCursor loop agroup := null; begin select group_num into agroup from web.obfuscated1 where issn in ( select distinct issn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 union select distinct eissn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 ) and group_num is not null and issn is not null and eissn is not null and rownum <= 1; exception when no_data_found then agroup := null; when others then agroup := null; end; if agroup is not null then for itemRec2 in ItemCursor2(itemRec.is2) loop update web.obfuscated1 set group_num = agroup where obfuscated1_uid = itemRec2.obfuscated1_uid; commit; end loop; else processCount := processCount + 1; for itemRec1 in ItemCursor1(itemRec.is2) loop update web.obfuscated1 set group_num = processCount where obfuscated1_uid = itemRec1.obfuscated1_uid; commit; end loop; commit; end if; end loop; dbms_output.put_line('Total record read: ' || processCount); exception when others then dbms_output.put_line('ORA' || sqlcode); dbms_output.put_line(substr(sqlerrm, 1, 255)); dbms_output.put_line('ORA- Error during processing ' ); end; / exit;
Eddie Awad.. 21
斜线有一个含义:
执行最近执行的SQL命令或存储在SQL缓冲区中的PL/SQL块.您可以在命令提示符处或多行命令的行号提示处输入斜杠(/).斜杠命令的功能与RUN类似,但不会列出命令.
ibre5041.. 7
使用Oracle时,您可以"混合"三种不同的语法.
SQL
PL/SQL
sqlplus(命令行客户端)
sqlplus可以通过将SQL和PL/SQL语句发送到DB服务器来执行/处理它们.sqlplus命令由sqlplus本身解释.
分号";" 不是SQL语法的一部分,sqlplus将其识别为SQL语句的结尾.而对于PL/SQL,它是语法的一部分,必须明确告诉sqlplus该语句在此结束,并且应该使用斜杠执行.
其他sqlplus命令是"EXIT","DEFINE""VARIABLE""PRINT""SET
另一方面,Toad例如在看到空行时识别PL/SQL块的结束.
斜线有一个含义:
执行最近执行的SQL命令或存储在SQL缓冲区中的PL/SQL块.您可以在命令提示符处或多行命令的行号提示处输入斜杠(/).斜杠命令的功能与RUN类似,但不会列出命令.
使用Oracle时,您可以"混合"三种不同的语法.
SQL
PL/SQL
sqlplus(命令行客户端)
sqlplus可以通过将SQL和PL/SQL语句发送到DB服务器来执行/处理它们.sqlplus命令由sqlplus本身解释.
分号";" 不是SQL语法的一部分,sqlplus将其识别为SQL语句的结尾.而对于PL/SQL,它是语法的一部分,必须明确告诉sqlplus该语句在此结束,并且应该使用斜杠执行.
其他sqlplus命令是"EXIT","DEFINE""VARIABLE""PRINT""SET
另一方面,Toad例如在看到空行时识别PL/SQL块的结束.
/最后是告诉解释器执行加载的脚本
基本上你键入东西然后键入"/",你刚刚输入的内容将执行