使用主键值调用Oracle中的检索过程

时间:2016-11-01 10:10:10

标签: oracle stored-procedures plsql

我有一张这样的表:

CST_ID CST_NAME CST_TYPE PYMENT_MODE TOTAL_PAYMENT
----------------------------------------------------
   105 Jyothy   Regular  Full                15900
   101 Alveena  Regular  half                15800
   102 Nizam    Regular  Full                15500
   100 Hari     Regular  Full                14500
   103 Sharath  Partime  Full                17500
   104 Jipsy    Shifted  Full                18000

我创建了一个存储过程,用于获取我从具有主键值字段(此处为cst_id)的过程调用的行为

CREATE or replace PROCEDURE sp_slct (cst_id NUMBER) AS
tot_id NUMBER;
--ls_name varchar2,
--ls_type varchar2,
--ls_mode varchar2,
--ls_pymnt int;
BEGIN 
    select 
        cst_id, cst_name, cst_type, payment_mode, total_payment into 
        ls_name, ls_type, ls_mode, ls_pymnt from tbl_cst 
        where
        tbl_cst.cst_id = sp_slct.cst_id;
        END sp_slct;

但是我在编译中遇到错误

如何获得结果以选择具有我作为过程输入的ID的行?

2 个答案:

答案 0 :(得分:0)

你至少错过了程序参数列表中的 IN 关键字,这里应该如何。 也许您应该在INTO子句中声明变量

CREATE or replace PROCEDURE sp_slct (cst_id IN NUMBER) AS

答案 1 :(得分:0)

如果你告诉我们你的错误消息会很好,这会提高帮助的可能性。到目前为止,您的程序除了启动查询之外什么都不做。

您有两种方法可以使用查询结果。你可以使用游标(如果你想搜索某些行)或者你可以使用"进入"如果你只需要一个值。 (正如你所做的那样)

如果您想获得与您的参数列表匹配的结果,您必须将您的参数放入where子句(就像您所做的那样)。

我能看到的唯一错误是订单:SELECT ... INTO ... FROM ...

Oracle documentation

当然,您必须声明变量(撤消您的评论)