首页 > 解决方案 > 从 rowtype 参数分配给变量值

问题描述

我搜索了 stackoverflow 和其他来源,但没有发现任何有用的东西。

我必须实现一个从 Reservation 表中接收一行(因此为“%rowtype”)作为参数的过程。

该表的名称是 Reservation(作为属性:id_Reservation、id_Room、price 等)。

我创建了一个匿名块来创建 var_reservation 变量,它将作为过程的参数:

CREATE OR REPLACE PROCEDURE priceCheckout(var_reservation reservation%ROWTYPE) IS
    l_idReservation NUMBER;
    l_idRoom NUMBER;
    prie INT;
    date1 DATE;
    date2 DATE;
    ex exception;

BEGIN
    l_idReservation := var_reservation.id_reservation;
    (...)
END;

但这是错误的。我该如何纠正?

标签: sqloracleplsql

解决方案


如果你做对了,它就可以工作。根据 Scott 的DEPT表格查看以下示例:

SQL> select * from dept;

    DEPTNO DNAME                LOC
---------- -------------------- --------------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SQL> set serveroutput on

程序:

SQL> create or replace procedure p_test (var_row dept%rowtype)
  2  is
  3    l_dname dept.dname%type;
  4  begin
  5    l_dname := var_row.dname;
  6
  7    dbms_output.put_line('Department name = ' || l_dname);
  8  end;
  9  /

Procedure created.

测试:

SQL> declare
  2    l_row dept%rowtype;
  3  begin
  4    select *
  5      into l_row
  6      from dept
  7      where deptno = 10;
  8
  9    p_test(l_row);
 10  end;
 11  /
Department name = ACCOUNTING

PL/SQL procedure successfully completed.

SQL>

说“这是错误的”很难调试。这不是 Oracle 错误消息,所以...除非您指定什么是“this”,并且可能编辑问题并发布您自己的 SQL*Plus 会话的复制/粘贴(就像我所做的那样),以便我们看到什么你做了,甲骨文如何回应,YOYO。


推荐阅读