哪些存储过程可以设置命令(声明或可执行)?

时间:2009-06-22 16:09:39

标签: oracle sqlplus


我们可以在哪个部分编写oracle过程中的set cmds(即set pagesize 250)

3 个答案:

答案 0 :(得分:1)

我看到你有一个类似的问题与“oracle”标签,并认为这个一般方向可能会有所帮助。

SQL * Plus是一个客户端程序,它提供了一个向Oracle数据库发出SQL命令的环境,该数据库还有一些指令(SET命令),用于控制客户端会话期间使用的环境和格式。您可以在BEGIN / END分隔的所谓“匿名块”中输入PL / SQL代码,但此代码在运行时解析,即使您正在执行过程代码,也不会作为过程存储在数据库中。

为了进一步模糊这些行,PL / SQL代码(存储过程/包以及匿名块)可能包含对产生输出的DBMS_OUTPUT包的调用,但只有从客户端环境执行时才能看到此输出可以收到输出。来自DBMS_OUTPUT的输出也存在大小限制,这可能会使其使用成为问题。

如果您尝试从Oracle数据库生成输出以进行报告或后处理,通常会有以下基于Oracle的选项:

  • 如果您有权访问数据库主机文件系统,则可以使用Oracle UTL_FILE包直接写入文件。您必须在PL / SQL过程或匿名块中自己编码游标,循环和输出格式。虽然PL / SQL代码只会写入主机文件系统,但可以从任何客户端调用它。

  • 如果您需要其他地方的输出并且输出符合DBMS_OUTPUT行和缓冲区限制,那么如果您编写的PL / SQL代码可以输出您想要的内容并调用此PL /,则您拥有最大的格式控制带有SQL * Plus SPOOL / SPOOL OFF指令的SQL,用于将输出保存在客户端文件系统上。

  • 如果您的输出不属于上述类别(例如,生成一个包含500个字符宽行的1亿行CSV文件),您可以通过使用适当的SQL函数获得所需的内容。查询以根据需要格式化结果,然后使用SQL * Plus SET指令关闭不属于结果集的所有内容(标题,分页符等)(再次使用SPOOL / SPOOL OFF)。

答案 1 :(得分:0)

没有。

这些命令是特定于sqlplus的 - 永远不适用于pl / sql。

答案 2 :(得分:0)

如果您使用的是sqlplus,则可以在oracle客户端安装中的sqlplus \ admin \ glogin.sql中设置它们。这将在您打开sqlplus应用程序时运行。它不适用于单一程序。