我正在使用Oracle SQL Developer Scratch Editor工具。有几个小错误,我不知道如何解决。
--SQLDEV:Following Line Not Recognized
WHILE @I <= @PAT_CNT
--SQLDEV:Following Line Not Recognized
BEGIN
SELECT PAT_NUMBER ,
PATIENT_ID ,
MRN ,
LAST_NAME ,
FIRST_NAME ,
UNIT_CODE ,
NURSING_UNIT ,
SDT ,
EDT ,
SHIFT_CODE ,
START_TIME ,
END_TIME
INTO v_PAT_NUMBER,
v_PATIENT_ID,
v_MRN,
v_LAST_NAME,
v_FIRST_NAME,
v_UNIT_CODE,
v_NURSING_UNIT,
v_SDT,
v_EDT,
v_SHIFT_CODE,
v_START_TIME,
v_END_TIME
FROM tt_v_PATS
WHERE PKEY = v_I;
BEGIN
v_L_CUR_DATE := TRUNC_DATE(v_P_START_DATE) ;
END;
--SQLDEV:Following Line Not Recognized
WHILE @L_CUR_DATE <= OPTC.TRUNC_DATE(@P_END_DATE)
--SQLDEV:Following Line Not Recognized
BEGIN
答案 0 :(得分:1)
对我而言,这并不是很明显你在这里尝试做什么......
在PL / SQL中,变量在匿名PL / SQL块的DECLARE
部分或命名PL / SQL块的IS/ AS
部分(存储过程或存储函数)中声明)。在PL / SQL中,BEGIN
需要与END
配对 - 我在代码中看到一堆BEGIN
语句,没有关联的END
。在PL / SQL中,不要使用@
来引用变量。
这样的东西在语法上是有效的,然而它并不是显而易见的,它会做你想要的。
DECLARE
v_PAT_NUMBER tt_v_PATS.PAT_NUMBER%type;
v_PATIENT_ID tt_v_PATS.PATIENT_ID%type;
v_MRN tt_v_PATS.MRN%type;
v_LAST_NAME tt_v_PATS.LAST_NAME%type;
v_FIRST_NAME tt_v_PATS.FIRST_NAME%type;
v_UNIT_CODE tt_v_PATS.UNIT_CODE%type;
v_NURSING_UNIT tt_v_PATS.NURSING_UNIT%type;
v_SDT tt_v_PATS.SDT%type;
v_EDT tt_v_PATS.EDT%type;
v_SHIFT_CODE tt_v_PATS.SHIFT_CODE%type;
v_START_TIME tt_v_PATS.START_TIME%type;
v_END_TIME tt_v_PATS.END_TIME%type;
v_pat_cnt integer := 100;
BEGIN
FOR i IN 1 .. v_pat_cnt
LOOP
SELECT PAT_NUMBER ,
PATIENT_ID ,
MRN ,
LAST_NAME ,
FIRST_NAME ,
UNIT_CODE ,
NURSING_UNIT ,
SDT ,
EDT ,
SHIFT_CODE ,
START_TIME ,
END_TIME
INTO v_PAT_NUMBER,
v_PATIENT_ID,
v_MRN,
v_LAST_NAME,
v_FIRST_NAME,
v_UNIT_CODE,
v_NURSING_UNIT,
v_SDT,
v_EDT,
v_SHIFT_CODE,
v_START_TIME,
v_END_TIME
FROM tt_v_PATS
WHERE PKEY = i;
<<do something with the local variables>>
END LOOP;
END;
当然,您也可以使用记录类型来简化代码
DECLARE
v_PATS_REC tt_v_PATS%rowype;
v_pat_cnt integer := 100;
BEGIN
FOR i IN 1 .. v_pat_cnt
LOOP
SELECT *
INTO v_PATS_REC
FROM tt_v_PATS
WHERE PKEY = i;
<<do something with the record>>
END LOOP;
END;