sql - 带有选择的 PL SQL 过程
问题描述
我想执行根据他/她所在的州返回作者的名字、姓氏和头衔的程序。但是上面的代码返回给我 PLS-00103 错误“文件结尾”。
CREATE OR REPLACE PROCEDURE proc1 (stattt OUT SYS_REFCURSOR) AS
BEGIN
SELECT a.au_fname, a.au_lname, t.title
FROM authors a, titleauthor ta, titles t
WHERE ta.au_id = a.au_id
AND t.title_id = ta.title_id
AND state = stattt
/
我也尝试使用
into proc1
但它仍然不起作用。这是来自我转换为 SQL Oracle 的 MS SQL 的示例数据库 Pubs。
解决方案
一些反对意见:
- 你已经知道那
END
是缺失的 - 除此之外, PL/SQL
INTO
中的语句需要SELECT
(即您必须将结果放在某处)。通常,您为此目的声明局部变量。您选择返回参考光标 - 好的 stattt
是 ref cursor,设置为该过程的 out 参数;我认为您不能将其用作该 WHERE 子句中的参数。
这是一个基于 Scott 模式的示例(因为我没有您的表),它显示了如何做到这一点。我将返回在某个部门工作的所有员工(在本例中为 10 名):
SQL> CREATE OR REPLACE PROCEDURE p_test (par_deptno IN NUMBER,
2 par_rc OUT SYS_REFCURSOR)
3 IS
4 BEGIN
5 OPEN par_rc FOR
6 SELECT empno, ename, sal
7 FROM emp
8 WHERE deptno = par_deptno;
9 END;
10 /
Procedure created.
SQL> var l_rc refcursor
SQL>
SQL> exec p_test(10, :l_rc);
PL/SQL procedure successfully completed.
SQL> print l_rc
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
7839 KING 10000
7934 MILLER 1300
SQL>
推荐阅读
- java - 在原始数组android java中循环
- ios - iOS swift - UICollectionView scrollToItem 在项目的 scrollPosition
- c++ - C++ 使用 GLFW,绘制三角形函数表现怪异, cout 被注释掉
- android - 如何解析对对象列表的 WebSocket 响应
- javascript - 通过在输入字段中输入 id 显示所有信息
- python - 如何创建基于模板的表并在多个 DITA xml 中使用它并通过它填充数据
- python - 无法遍历 Pytorch Dataloader 。不等张量
- html - 使用 VBA 从网站源代码更新/提取变化的元素
- botframework - 为bot FRAMEWORK连接ETIMEDOUT 137.116.128.188:443,可以扩展
- json - 在 Hive 中将结构数组转换为 Json