从过程中调用数据
calling data from procedure
嗨,我不确定我做错了什么。我正在尝试 display/return 我创建的过程中的所有记录。 Table 结构是 DD_PROJECT
和下面的 IDPROJ, PROJNAME,PROJSTART,PROJEND,PROJGOAL,PROJ
COORD
。我需要帮助根据指定的项目 ID 提取该信息。无论如何,这是我目前的代码:
create or replace procedure DDPROJ_SP(p_proj_id DD_PROJECT.IDPROJ%type, p_proj_rec out DD_PROJECT%rowtype)
is
begin
select *
into p_proj_rec
from DD_PROJECT
where DD_PROJECT.IDPROJ=p_proj_id;
exception
when others then
p_proj_rec.idproj:=-1;
end;
现在我正在尝试使用以下代码调用该过程:
set serveroutput on
DECLARE
p_proj_id :=& proj_id;
BEGIN
DDROJ_SP(p_proj_id);
DBMS_OUTPUT.PUT_LINE(
'Project ID: ' || p_proj_rec.projid
||' Project Name: ' || p_proj_rec.projname
||' Project Start Date: ' || p_proj_rec.projstartdate
||' Project End Date: ' || p_proj_rec.projenddate
||' Project Fund Goal: ' || p_proj_rec.projfundgoal
||' Project Coor: ' || p_proj_rec.projcoord
);
end;
这是错误:
错误报告 -
ORA-06550:第 2 行,第 12 列:
PLS-00103:遇到符号“=”
此时我希望用户输入一个项目Id并在上面的输出代码中提取信息。
Error report - ORA-06550: line 2, column 12: PLS-00103: Encountered the symbol "="
问题#1
那是因为在匿名块的第 2 行中您声明了变量而没有提及它是 DATA TYPE。你可以这样做:
set serveroutput on
DECLARE
p_proj_id DD_PROJECT.IDPROJ%TYPE; -- Data type
BEGIN
p_proj_id :=& proj_id;
问题#2
DDROJ_SP(p_proj_id);
您还需要声明 p_proj_rec
您在过程中用作 OUT 参数。
您的要求很简单,您可以使用 REFCURSOR
来完成。要打印该行,您可以在 SQL*Plus
.
中使用 print 命令
例如,
SQL> CREATE OR REPLACE
2 PROCEDURE p_rec(i_empno emp.empno%TYPE,
3 emp_rec OUT sys_refcursor)
4 IS
5 BEGIN
6 open emp_rec for select * FROM scott.emp where empno = i_empno;
7 END p_rec;
8 /
Procedure created.
SQL>
SQL> sho err
No errors.
SQL>
SQL> variable emp_rec refcursor
SQL>
SQL> BEGIN
2 p_rec(7369, :emp_rec);
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> print emp_rec;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL>
理想情况下,您甚至不需要程序,只需将 empno 作为输入即可。
您可以只定义输入,或提示输入值,打开光标并打印记录:
SQL> variable r refcursor
SQL> define i_empno=7369
SQL>
SQL> BEGIN
2 OPEN :r FOR SELECT * FROM emp WHERE empno = &i_empno;
3 END;
4 /
old 2: OPEN :r FOR SELECT * FROM emp WHERE empno = &i_empno;
new 2: OPEN :r FOR SELECT * FROM emp WHERE empno = 7369;
PL/SQL procedure successfully completed.
SQL>
SQL> print r;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL>
您错过了变量类型:
SET SERVEROUTPUT ON
DECLARE
p_proj_id dd_project.idproj%TYPE :=& proj_id;
p_proj_rec dd_project%rowtype;
BEGIN
DDROJ_SP(p_proj_id,p_proj_rec);
DBMS_OUTPUT.PUT_LINE('Project ID: ' || p_proj_rec.projid
||' Project Name: ' || p_proj_rec.projname
||' Project Start Date: ' || p_proj_rec.projstartdate
||' Project End Date: ' || p_proj_rec.projenddate
||' Project Fund Goal: ' || p_proj_rec.projfundgoal
||' Project Coor: ' || p_proj_rec.projcoord
);
END;
嗨,我不确定我做错了什么。我正在尝试 display/return 我创建的过程中的所有记录。 Table 结构是 DD_PROJECT
和下面的 IDPROJ, PROJNAME,PROJSTART,PROJEND,PROJGOAL,PROJ
COORD
。我需要帮助根据指定的项目 ID 提取该信息。无论如何,这是我目前的代码:
create or replace procedure DDPROJ_SP(p_proj_id DD_PROJECT.IDPROJ%type, p_proj_rec out DD_PROJECT%rowtype)
is
begin
select *
into p_proj_rec
from DD_PROJECT
where DD_PROJECT.IDPROJ=p_proj_id;
exception
when others then
p_proj_rec.idproj:=-1;
end;
现在我正在尝试使用以下代码调用该过程:
set serveroutput on
DECLARE
p_proj_id :=& proj_id;
BEGIN
DDROJ_SP(p_proj_id);
DBMS_OUTPUT.PUT_LINE(
'Project ID: ' || p_proj_rec.projid
||' Project Name: ' || p_proj_rec.projname
||' Project Start Date: ' || p_proj_rec.projstartdate
||' Project End Date: ' || p_proj_rec.projenddate
||' Project Fund Goal: ' || p_proj_rec.projfundgoal
||' Project Coor: ' || p_proj_rec.projcoord
);
end;
这是错误: 错误报告 - ORA-06550:第 2 行,第 12 列: PLS-00103:遇到符号“=”
此时我希望用户输入一个项目Id并在上面的输出代码中提取信息。
Error report - ORA-06550: line 2, column 12: PLS-00103: Encountered the symbol "="
问题#1
那是因为在匿名块的第 2 行中您声明了变量而没有提及它是 DATA TYPE。你可以这样做:
set serveroutput on
DECLARE
p_proj_id DD_PROJECT.IDPROJ%TYPE; -- Data type
BEGIN
p_proj_id :=& proj_id;
问题#2
DDROJ_SP(p_proj_id);
您还需要声明 p_proj_rec
您在过程中用作 OUT 参数。
您的要求很简单,您可以使用 REFCURSOR
来完成。要打印该行,您可以在 SQL*Plus
.
例如,
SQL> CREATE OR REPLACE
2 PROCEDURE p_rec(i_empno emp.empno%TYPE,
3 emp_rec OUT sys_refcursor)
4 IS
5 BEGIN
6 open emp_rec for select * FROM scott.emp where empno = i_empno;
7 END p_rec;
8 /
Procedure created.
SQL>
SQL> sho err
No errors.
SQL>
SQL> variable emp_rec refcursor
SQL>
SQL> BEGIN
2 p_rec(7369, :emp_rec);
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> print emp_rec;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL>
理想情况下,您甚至不需要程序,只需将 empno 作为输入即可。
您可以只定义输入,或提示输入值,打开光标并打印记录:
SQL> variable r refcursor
SQL> define i_empno=7369
SQL>
SQL> BEGIN
2 OPEN :r FOR SELECT * FROM emp WHERE empno = &i_empno;
3 END;
4 /
old 2: OPEN :r FOR SELECT * FROM emp WHERE empno = &i_empno;
new 2: OPEN :r FOR SELECT * FROM emp WHERE empno = 7369;
PL/SQL procedure successfully completed.
SQL>
SQL> print r;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL>
您错过了变量类型:
SET SERVEROUTPUT ON
DECLARE
p_proj_id dd_project.idproj%TYPE :=& proj_id;
p_proj_rec dd_project%rowtype;
BEGIN
DDROJ_SP(p_proj_id,p_proj_rec);
DBMS_OUTPUT.PUT_LINE('Project ID: ' || p_proj_rec.projid
||' Project Name: ' || p_proj_rec.projname
||' Project Start Date: ' || p_proj_rec.projstartdate
||' Project End Date: ' || p_proj_rec.projenddate
||' Project Fund Goal: ' || p_proj_rec.projfundgoal
||' Project Coor: ' || p_proj_rec.projcoord
);
END;