Kir*_*el 2 oracle plsql stored-procedures oracle12c
我正在尝试将SQL查询转换为Oracle PL / SQL存储过程。
这是查询:
select * from table1 where DATE = " + s1 + " and TYPE='" + ty + "' and NAME='"+nm+"' Order by TYPE DEsc;
Run Code Online (Sandbox Code Playgroud)
这是存储过程:
CREATE PROCEDURE procedure1
(
s1 IN DATE,
ty IN CHAR DEFAULT 2,
nm IN VARCHAR2 DEFAULT 64
)
IS
d table1.DATE%TYPE;
C table1.TYPE%TYPE;
S table1.NAME%TYPE;
CURSOR tb IS select DATE,TYPE,NAME INTO d,c,s from table1;
BEGIN
FOR i IN tb
LOOP
DBMS_OUTPUT.PUT_LINE('DATE' ||i.DATE);
DBMS_OUTPUT.PUT_LINE('TYPE' ||i.TYPE);
DBMS_OUTPUT.PUT_LINE('NAME' ||i.NAME);
END LOOP;
END procedure1;
Run Code Online (Sandbox Code Playgroud)
执行存储过程后,看不到任何输出。我不确定是否正确创建了存储过程。
“执行存储过程后,我看不到任何输出”
您的“输出”是DBMS_OUTPUT,用于在屏幕上显示文本。但是,默认情况下,它将文本写入缓冲区,我们需要启用输出以查看缓冲区的内容。
具体操作方式取决于您所使用的客户端。在SQL * Plus中
SQL> set serveroutput on
Run Code Online (Sandbox Code Playgroud)
在像TOAD,PLSQL Developer或Oracle SQL Developer这样的IDE中,有一个单独的DBMS_OUTPUT选项卡:单击该选项卡并启用输出(有一个按钮)-或将“ Preferences”(首选项)设置为始终打开。
DBMS_OUTPUT很少是在实际应用程序中返回数据的有用方法。通常的方法是使用Ref Cursor,它映射到JDBC和ODBC ResultSet类。像这样:
CREATE OR REPLACE PROCEDURE procedure1
(
s1 IN DATE,
ty IN CHAR DEFAULT 2,
nm IN VARCHAR2 DEFAULT 64,
rc out sys_refcursor
)
IS
BEGIN
open rc for
select * from table1
where d = s1
and c = ty
and s = nm;
END procedure1;
/
Run Code Online (Sandbox Code Playgroud)
顺便说一下,您的参数是用字符串数据类型定义的,但是默认值是数字值。请不要养成不良习惯。强大的数据类型是防止数据损坏和代码损坏的关键防御措施,因此请始终使用正确的数据类型。
归档时间: |
|
查看次数: |
538 次 |
最近记录: |