Hay un par de cosas que no me terminan de cerrar (aún considerando que llevo sólo un año y medio en Oracle):
1) Las llamadas de tipo $1 y $2, son más propias de la ejecución de scripts Oracle por bash (consola), que de un stored procedure. Al menos en ninguno de los SP que están en la base de nuestra empresa existen parámetros usados así...
2) Pareciera que pretendieras usar cursores, pero no están declarados. Y el uso de cosas como "SELECT rsl IN SELECT rsu.c_elementvalue_id...", o "FOR rs IN SELECT Account_ID, DATEACCT..." simplemente no las encuentro ni en los manuales.
¿Estás seguro de no estar usando sintaxis de PostgreSQL o Firebird?
Lo que sí he encontrado documentado como para Oracle 11g, es una forma como esta:
Código SQL:
Ver originalFOR i IN ( SELECT prim_key j FROM data_table )
loop
SELECT 'Very long descrip of prim_key:', prim_key
FROM data_table WHERE prim_key = i.j ;
SELECT 'Very long descrip of field 1:', field1
FROM data_table WHERE prim_key = i.j ;
SELECT 'Very long descrip of field 2:', field2
FROM data_table WHERE prim_key = i.j ;
END loop
Donde, puedes ver, la subconsulta de origen está encerrada entre paréntesis. Aunque, claro, no es un modo muy ortodoxo de hacerlo. Hay algunas otras formas mucho más eficientes.
Fuera de eso, insisto, da la impresión de que estás trayendo sintaxis de un DBMS a otro, y no existe un PL/SQL estándar...