【问题标题】:PL/SQL procedure for inner join and where clause用于内部连接和 where 子句的 PL/SQL 过程
【发布时间】:2023-03-17 03:00:03
【问题描述】:

我想为以下查询创建 PL/SQL 存储过程:

SELECT order_id, order_date,  customer_id
FROM Orders 
INNER JOIN Customers ON Orders.customer_id = Customers.customer_id
WHERE order_id = xyz;

我想在存储过程中传递order_id 作为输入参数。 有人可以分享一下这个的 PL/SQL 代码吗?

【问题讨论】:

  • 你想让这个过程做什么?
  • 我希望程序显示上述查询的结果。
  • 显示结果 = 返回一个引用光标?

标签: oracle stored-procedures plsqldeveloper


【解决方案1】:

试试这个功能

   CREATE OR REPLACE FUNCTION fn_test(p1 IN NUMBER)
    RETURN VARCHAR2
    IS

    s_query_stmt     VARCHAR2(1000 CHAR);
    r1               VARCHAR2(100 CHAR);
    r2               VARCHAR2(100 CHAR);
    r3               VARCHAR2(100 CHAR);

   BEGIN

   s_query_stmt := 'Select order_id, order_date, customer_id 
                    From Orders inner join Customers 
                    On Orders.customer_id = Customers.customer_id
                   WHERE order_id = :x )';

   EXECUTE IMMEDIATE s_query_stmt INTO r1, r2, r3 USING p1;
   return 'x';

  END;

【讨论】:

    【解决方案2】:

    返回这些值的最简单的过程形式是这样的 (:

    create or replace procedure retrieve_order_values(
      p_order_id IN Orders.order_id%type
    , p_order_date OUT Orders.order_date%type
    , p_customer_id OUT Orders.customer_id%type
    )
    is
    begin
      select order_date, customer_id
      into p_order_date, p_customer_id
      from orders
      where order_id = p_order_id;
    end retrieve_order_values;
    

    请注意,您不需要加入 Customers 表来检索 customer_id。

    【讨论】:

    • 我使用join的原因是我以后可能需要3-4个表的数据。
    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多