在 Oracle 存储过程中运行查询
我有一个查询
select * from myTable
...并且我想将此查询包装在存储过程中,并让存储过程输出此查询的结果。
我该怎么做?
在 ms-sql 中,我可以将查询作为字符串存储到字符串变量中。然后执行“执行(变量)”。为什么Oracle中没有这样的东西?
I have a query
select * from myTable
...and I want to wrap this query inside a stored procedure, and have the store procedure output the results of this query.
How do I do it?
In ms-sql, i can store my query as a string to a string variable. And then do "Execute (variable)". Why no such thing in Oracle?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
用途:
如果您想在 Oracle 上运行动态 SQL,请使用此选项:
如果您想在动态 SQL 中包含绑定变量:
Use:
Use this if you want to run dynamic SQL on Oracle:
If you want to include bind variables in the dynamic SQL:
您需要使用参考光标。
查看 odp 文档。它有一个非常好的示例,涵盖了 DB 和 .Net 代码。
它是在安装oracle客户端时附带的,但它隐藏在目录结构深处。转到-> odp->文档 -> 。
You need to use a ref cursor.
Check out the odp documentation. It has a very good example, covering both the DB and the .Net code.
It comes with the installation of the oracle client, but it is hidden deep in the directory structure. Go to the -> odp -> doc -> .
多年来,引用游标一直是执行此操作的标准方法,但使用管道表函数有一种略有不同的替代方法:http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2345
它们相当广泛用于数据仓库应用程序,并且可以并行执行,因此它们具有非常高的性能(尽管不如仅运行 SELECT)。
Ref Cursors have been the standard way of doing this for years, but there is a slightly different alternative using pipelined table functions: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2345
They are fairly widely used in data warehousing applications and the execution can be parallelised so they're very high performance (not as good as just running a SELECT though).