I’m working on a Oracle stored procedure , my oracle database version is Oracle Database 11.2.0.1.0 , I’m very familiar with MySQL and SQL Server as well but I am really new to Oracle, I tried to program a stored procedure it’s not working
CREATE OR REPLACE PROCEDURE update_ybm_for_exp_yb_ybjs IS
CURSOR cur_exp_yb_ybjs IS
SELECT setl_id, PHARMACY_ID, PATIENT_ID, prodno, batchno, created
FROM exp_yb_ybjs_20240604_copy;
v_setl_id exp_yb_ybjs_20240604_copy.setl_id%TYPE;
v_PHARMACY_ID exp_yb_ybjs_20240604_copy.PHARMACY_ID%TYPE;
v_PATIENT_ID exp_yb_ybjs_20240604_copy.PATIENT_ID%TYPE;
v_prodno exp_yb_ybjs_20240604_copy.prodno%TYPE;
v_batchno exp_yb_ybjs_20240604_copy.batchno%TYPE;
v_created exp_yb_ybjs_20240604_copy.created%TYPE;
myYBFL_ML yw_spxxhzb.YBFL_ML%TYPE;
BEGIN
OPEN cur_exp_yb_ybjs;
LOOP
FETCH cur_exp_yb_ybjs INTO v_setl_id, v_PHARMACY_ID, v_PATIENT_ID, v_prodno, v_batchno, v_created;
EXIT WHEN cur_exp_yb_ybjs%NOTFOUND;
BEGIN
-- Check if the record exists in yw_spxxhzb
SELECT YBFL_ML
INTO myYBFL_ML
FROM (
SELECT YBFL_ML, ROW_NUMBER() OVER (ORDER BY created DESC) AS rn
FROM yw_spxxhzb
WHERE created <= v_created AND prodno = v_prodno
)
WHERE rn = 1;
-- Update the target table
UPDATE exp_yb_ybjs_20240604_copy
SET ITEM_ID= myYBFL_ML
WHERE setl_id = v_setl_id
AND PHARMACY_ID = v_PHARMACY_ID
AND PATIENT_ID = v_PATIENT_ID
AND prodno = v_prodno
AND batchno = v_batchno
AND created = v_created;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Handle case where no matching record is found
NULL; -- No action needed if no record is found
END;
END LOOP;
CLOSE cur_exp_yb_ybjs;
END update_ybm_for_exp_yb_ybjs;
/
the problem I encountered was
SQL Error [900] [42000]: ORA-00900: invalid SQL statement
Error position: line: 8
the code of line was
v_setl_id exp_yb_ybjs_20240604_copy.setl_id%TYPE
any idea what mistakes I made in this stored procedure ? any suggestions ? thank you so much
I hope this stored procedure was created successfully
New contributor
Tommas Lees is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.