I have a stored procedure I am trying write and I wanted to use a cursor as a worktable so I could use the results to update a table. It is throwing a few errors. Would anyone be able to help me resolve these?
create or replace PROCEDURE SP_POPULATE_STUDENT_STOPTEMPID
AS
CURSOR c_workTable IS
SELECT
stdnt.STUDENT_ID,
stdnt.route_code,
stdnt.DISPATCH_TYPE,
stdnt.RUN_CODE,
stdnt.STOP_ADDRESS,
stdnt.STOP_TIME,
ST.STOP_TEMPLATE_ID
FROM
STOP_TEMPLATE ST
JOIN TASK_TEMPLATE TT
ON ST.TASK_TEMPLATE_ID = TT.TASK_TEMPLATE_ID
JOIN RUN_TEMPLATE RT
ON ST.RUN_TEMPLATE_ID = RT.RUN_TEMPLATE_ID,
STUDENT stdnt
WHERE
TT.TASK_NAME = stdnt.route_code
AND TT.DISPATCH_TYPE = stdnt.DISPATCH_TYPE
AND RT.RUN_CODE = stdnt.RUN_CODE
AND ST.STOP_DESCRIPTION = stdnt.STOP_ADDRESS
AND CAST(ST.EXPECTED_ARRIVAL_TIME AS TIME(7)) = stdnt.STOP_TIME ;
BEGIN
UPDATE STUDENT stdnt
SET stdnt.STOP_TEMPLATE_ID = c_workTable .STOP_TEMPLATE_ID
FROM
c_workTable
WHERE
stdnt.STUDENT_ID = c_workTable .STUDENT_ID
AND stdnt.route_code = c_workTable .route_code
AND stdnt.DISPATCH_TYPE = c_workTable .DISPATCH_TYPE
AND stdnt.RUN_CODE = c_workTable .RUN_CODE
AND stdnt.STOP_ADDRESS = c_workTable .STOP_ADDRESS
AND stdnt.STOP_TIME = c_workTable .STOP_TIME
END SP_POPULATE_STUDENT_STOPTEMPID;
ETA: changed some var names in query
I have written this based on a sql server stored procedure but I am getting a few errors in the update statement.
On UPDATE STUDENT stdnt
Error(30,5): PL/SQL: SQL Statement ignored
Then on the from clause I get this error
Error(32,5): PL/SQL: ORA-00933: SQL command not properly ended
Finally on the END clause I get
Error(42,35): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with
<< continue close current delete fetch lock
insert open rollback savepoint set sql execute commit forall merge pipe purge
--new code
UPDATE(
SELECT stdnt.STOP_TEMPLATE_ID as old_val,
ST.STOP_TEMPLATE_ID as new_val
FROM STUDENT stdnt
JOIN STOP_TEMPLATE ST
JOIN TASK_TEMPLATE TT
ON ST.TASK_TEMPLATE_ID = TT.TASK_TEMPLATE_ID
JOIN RUN_TEMPLATE RT
ON ST.RUN_TEMPLATE_ID = RT.RUN_TEMPLATE_ID
JOIN STUDENT stdnt
ON (TT.TASK_NAME = stdnt.route_code
AND TT.DISPATCH_TYPE = stdnt.DISPATCH_TYPE
AND RT.RUN_CODE = stdnt.RUN_CODE
AND ST.STOP_DESCRIPTION = stdnt.STOP_ADDRESS
AND CAST(ST.EXPECTED_ARRIVAL_TIME AS TIMESTAMP(7)) =
stdnt.STOP_TIME)
) t
SET t.old_val = t.new_val;