【问题标题】:how to print values of cursor如何打印光标的值
【发布时间】:2020-03-20 09:42:46
【问题描述】:

我是 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;

此代码已编译,但未打印任何值。我检查了表格,它有上述值的数据。如何打印光标值?

【问题讨论】:

  • 您使用的是哪个客户端?在Oracle自带的工具(SQL*Plus、SQL Developer、SQLcl)中可以set serveroutput on查看脚本输出; GUI 工具也有其他显示方式。
  • 看起来你可以在没有任何光标的情况下测试dbms_output.put_line('test')

标签: sql oracle plsql database-cursor


【解决方案1】:

试试下面的,也参考这个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; 

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多