我有一个PL / SQL包,我想声明一个由不同的其他包使用的select-statment。所以我看到了方法。第一种方法我定义一个游标,可以从其他包调用并存储选择。第二种方式是存储选择的过程。
有人可以告诉我每种方式的优缺点吗?我的教授说,光标老了,有状态,今天没人用。我的厨师告诉我Cursor迭代速度更快,你可以制作它的类型。
有人可以告诉我这里的最佳做法是什么?
例如:
CURSOR crs_active_customer IS
SELECT * FROM customer where status = 'active'
OR
PROCEDURE prc_getActiveCustomer IS
BEGIN
SELECT * FROM customer where status = 'active';
END prc_getActiveCustomer;
存储select语句的更好方法是什么。
答案 0 :(得分:1)
我会编写一个函数,每次调用它时都会返回一个新的游标实例。包中的游标变量实际上是一个GLOBAL变量:一次只能有一个过程使用它。这可能是你的教授所指的问题。
拥有全局游标意味着如果编写一个过程,在扫描此类游标的结果时调用内部需要使用相同游标的另一个函数,则会遇到“游标已打开”错误。
答案 1 :(得分:0)
PL/SQL 101救援!来自Working with Cursors:
Oracle PL / SQL语言的核心目的是使查询和更改数据库中表的内容变得尽可能简单有效。当然,您必须使用SQL语言来访问表,并且每次执行此操作时,都使用游标来完成工作。
因此,每次在PL / SQL中使用SQL时都会有一个游标。接下来的问题是有什么类型的游标以及何时使用它们。上面提到的文章也涉及这个话题。
您还可以阅读精细手册:Cursors
游标是指向私有SQL区域的指针,该区域存储有关处理特定SELECT或DML语句的信息。
然后继续阅读隐式和显式游标。
接下来找一位更好的教授。