如何打印光标的值

时间:2020-03-20 09:42:46

标签: sql oracle plsql database-cursor

我是pl sql编程的新手。我有以下光标代码。

DECLARE
  CURSOR cs_get_pricing(ca_ite_id VARCHAR2, ca_prg_id NUMBER) IS
    SELECT pri_ite_id,
           pri_prg_id,
           pri_price,
           pri_regular_price,
           pri_discount_period
    FROM   PRICE
    WHERE  pri_ite_id = ca_ite_id
    AND    pri_prg_id = ca_prg_id
    AND    TRUNC(SYSDATE) BETWEEN pri_startdt AND pri_enddt;

  rec_get_pricing    cs_get_pricing%ROWTYPE;
BEGIN
  OPEN cs_get_pricing('BTSTNDM203005', 700);

  FETCH cs_get_pricing  INTO  rec_get_pricing;
  DBMS_OUTPUT.PUT_LINE('test');
  CLOSE cs_get_pricing;

  dbms_output.put_line(rec_get_pricing.pri_regular_price);
END;

此代码将被编译,但不会打印任何值。我已经检查了表,它具有上述值的数据。如何打印光标值?

1 个答案:

答案 0 :(得分:0)

请尝试以下操作,并同时参阅此link

    DECLARE
        CURSOR cs_get_pricing(
          ca_ite_id VARCHAR2,
          ca_prg_id NUMBER) IS
          SELECT pri_ite_id,
                 pri_prg_id,
                 pri_price,
                 pri_regular_price,
                 pri_discount_period
          FROM   price
          WHERE  pri_ite_id = ca_ite_id
                 AND pri_prg_id = ca_prg_id
                 AND Trunc(SYSDATE) BETWEEN pri_startdt AND pri_enddt;
        rec_get_pricing cs_get_pricing%ROWTYPE;
    BEGIN
        OPEN cs_get_pricing('BTSTNDM203005', 700);
                LOOP 
        FETCH cs_get_pricing INTO rec_get_pricing;
                EXIT WHEN cs_get_pricing%NOTFOUND;
        dbms_output.Put_line('test');
        dbms_output.Put_line(rec_get_pricing.pri_regular_price);
        END LOOP;

        CLOSE cs_get_pricing;
    END;