【发布时间】:2017-05-15 16:48:39
【问题描述】:
我是 PLSQL 的新手,我正在尝试执行此处显示的存储过程。
此存储过程将检查特定行并根据计数更新表或插入。但我总体上低于错误。
31/18 PL/SQL:ORA-00928:缺少 SELECT 关键字
31/1 PL/SQL:忽略 SQL 语句
37/26 PL/SQL:ORA-00933:SQL 命令未正确结束
36/1 PL/SQL:忽略 SQL 语句
我尽力解决它们。能帮忙解决一下问题吗?
这是我为此任务编写的程序:
CREATE OR REPLACE PROCEDURE LPR_LP_TEST.SP_PTMS_NOTES
(
p_app_lse_s IN mjl.app_lse_s%TYPE,
p_dt_ent_s IN mjl.dt_ent_s%TYPE,
p_note_type_s IN mjl.note_type_s%TYPE,
p_prcs_c IN mjl.prcs_c%TYPE,
p_prio_c IN mjl.prio_c%TYPE,
p_note_title_s IN mjl.note_title_s%TYPE,
p_info1_s IN mjl.info1_s%TYPE,
p_info2_s IN mjl.info2_s%TYPE
)
AS
v_rowcount_i number;
v_lien_date mjl.info1_s%TYPE;
--v_lien_date NMAC_PTMS_NOTEBK_SG.LIEN_DT%TYPE;
v_asst_amount mjl.info2_s%TYPE;
BEGIN
app_lse_s:=trim(app_lse_s);
dbms_output.put_line(app_lse_s);
select LIEN_DT,ASES_PRT_1_AM
INTO v_lien_date,v_asst_amount
from NMAC_PTMS_NOTEBK_SG
where LSE_ID ='&2';
select count(*) into v_rowcount_i from MJL where trim(app_lse_s) ='&2';
if v_rowcount_i = 0 then
begin
Insert into MJL
('app_lse_s','dt_ent_s','note_type_s','prcs_c','prio_c','note_title_s','info
1_s','Info2_s')
values ('&2','sysdate','SPPT','Y','1','Property Tax
Assessment','v_lien_date','v_asst_amount');
end;
else
begin
update mjl
set dt_ent_s = 'sysdate' and note_type_s = 'SPPT' and prcs_c = 'Y' and
prio_c = '1' and note_title_s = 'Property Tax Assessment' and info1_s =
'v_lien_date' and Info2_s = 'v_asst_amount'
where trim(app_lse_s) = '&2';
end;
end if;
commit;
end;
/
【问题讨论】:
-
你一直引用
'&2',但这是一个过程。如果您希望将&2替换为一个值,则应该使用一个参数。另外,当您没有声明该名称的变量时,app_lse_s:=trim(app_lse_s);是什么?此外,您不需要围绕更新和插入的额外开始/结束 - 这可能应该是单个 MERGE 语句!最后,您将插入语句中的列名用单引号括起来;或者不应该有引号(列不区分大小写)或双引号(列区分大小写)。 -
感谢@Boneist 的宝贵建议。 "&2" 我在执行程序时输入值。现在我在更新语句中收到以下错误。 “错误第 35 行,第 26 列,第 35 行,第 35 行,第 28 行,找到‘和’,期望:; - 或 - 日志 - 或 - 返回 - 或 - 位置 - 或 - , - 或 - + - || - 或 - * / MOD REM -or- ** -or- ( (+) AT DAY MULTISET YEAR" 。我不确定我在哪里失踪。你能帮我解决这个问题吗?
-
请参阅下面我的回答中的第 2 点。至于
"&2" i am entering the value while executing the procedure- 您可以通过将值作为参数传递来做到这一点,例如begin lpr_lp_test.sp_ptms_notes(p_app_lse_s => '123', ....); end; /
标签: oracle stored-procedures plsql