|
Ошибка PLS-00103
#39313871
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Нижний Новгород
Сообщения: 1 928
|
|
авторзапросы написаны правильно
Кроме SQL, есть еще PL/SQL.
Баланс скобок кое-где нарушен, и пропущен вызов функции, и elsif.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
CREATE OR REPLACE NONEDITIONABLE FUNCTION policy (state INTEGER DEFAULT NULL, client_type INTEGER)
RETURN typepolicylist pipelined AS
BEGIN
IF state IS NULL THEN
IF client_type = 1 THEN
FOR i IN (SELECT PLC.POLICY_ID, LNG.NAME AS POLICY_STATE, PLC.POLICY_NO, PLC.INSR_BEGIN, PLC.INSR_END, INS.NAME AS PRODUCT,
'Страхователь' AS MAN_TYPE, OFFICE.NAME AS DEPARTMENT, PPSTAFF.NAME AS STAFF, CL.MAN_ID, PLC.POLICY_STATE
FROM insis_cnt_v1.policy PLC
join INSIS_CNT_V1.p_clients cl ON plc.client_id = cl.client_id
join insis_cnt_v1.p_people pp ON pp.man_id = cl.man_id
JOIN INSIS_CNT_V1.cfg_nom_language_table LNG ON LNG.TABLE_NAME = 'HST_POLICY_STATE' AND LNG.ID = PLC.POLICY_STATE AND LNG.LANGUAGE = 'RUSSIAN'
JOIN INSIS_CNT_V1.HT_INSR_TYPE INS ON INS.ID = PLC.INSR_TYPE
JOIN INSIS_CNT_V1.cnt_offices OFFICE ON OFFICE.OFFICE_ID = PLC.OFFICE_ID
JOIN INSIS_CNT_V1.P_STAFF STAFF ON STAFF.STAFF_ID = PLC.STAFF_ID
JOIN INSIS_CNT_V1.P_PEOPLE PPSTAFF ON STAFF.MAN_ID = PPSTAFF.MAN_ID)
LOOP
pipe row (typepolicy(I.POLICY_ID, I.POLICY_STATE, I.POLICY_NO, I.INSR_BEGIN, I.INSR_END, I.PRODUCT, I.MAN_TYPE, I.DEPARTMENT, I.STAFF, I.MAN_ID, I.POLICY_STATE));
END LOOP;
ELSIF client_type = 2 THEN
FOR i IN (SELECT PLC.POLICY_ID, LNG.NAME AS POLICY_STATE, PLC.POLICY_NO, PLC.INSR_BEGIN, PLC.INSR_END, INS.NAME AS PRODUCT,
'Застрахованный водитель' AS MAN_TYPE, OFFICE.NAME AS DEPARTMENT, PPSTAFF.NAME AS STAFF, CL.MAN_ID, PLC.POLICY_STATE
FROM insis_cnt_v1.policy plc
join INSIS_CNT_V1.INSURED_OBJECT_DRIVERS cl ON PLC.POLICY_ID = CL.POLICY_ID
join insis_cnt_v1.p_people pp ON pp.man_id = cl.man_id
JOIN INSIS_CNT_V1.cfg_nom_language_table LNG ON LNG.TABLE_NAME = 'HST_POLICY_STATE' AND LNG.ID = PLC.POLICY_STATE AND LNG.LANGUAGE = 'RUSSIAN'
JOIN INSIS_CNT_V1.HT_INSR_TYPE INS ON INS.ID = PLC.INSR_TYPE
JOIN INSIS_CNT_V1.cnt_offices OFFICE ON OFFICE.OFFICE_ID = PLC.OFFICE_ID
JOIN INSIS_CNT_V1.P_STAFF STAFF ON STAFF.STAFF_ID = PLC.STAFF_ID
JOIN INSIS_CNT_V1.P_PEOPLE PPSTAFF ON STAFF.MAN_ID = PPSTAFF.MAN_ID)
LOOP
pipe ROW (typepolicy(I.POLICY_ID, I.POLICY_STATE, I.POLICY_NO, I.INSR_BEGIN, I.INSR_END, I.PRODUCT, I.MAN_TYPE, I.DEPARTMENT, I.STAFF, I.MAN_ID, I.POLICY_STATE
));
END LOOP;
ELSIF client_type = 3 THEN
FOR i IN (SELECT plc.policy_id, LNG.NAME AS POLICY_STATE, PLC.POLICY_NO, PLC.INSR_BEGIN, PLC.INSR_END, INS.NAME AS PRODUCT,
'Выгодопреобретатель' AS MAN_TYPE, OFFICE.NAME AS DEPARTMENT, PPSTAFF.NAME AS STAFF, cl.man_id, plc.policy_state
FROM insis_cnt_v1.policy plc
LEFT JOIN INSIS_CNT_V1.INSURED_OBJECT OBJ ON OBJ.POLICY_ID = PLC.POLICY_ID
join INSIS_CNT_V1.O_OBJECT_PERSONS cl ON OBJ.OBJECT_ID = CL.OBJECT_ID
join insis_cnt_v1.p_people pp ON pp.man_id = cl.man_id
JOIN INSIS_CNT_V1.cfg_nom_language_table LNG ON LNG.TABLE_NAME = 'HST_POLICY_STATE' AND LNG.ID = PLC.POLICY_STATE AND LNG.LANGUAGE = 'RUSSIAN'
JOIN INSIS_CNT_V1.HT_INSR_TYPE INS ON INS.ID = PLC.INSR_TYPE
JOIN INSIS_CNT_V1.cnt_offices OFFICE ON OFFICE.OFFICE_ID = PLC.OFFICE_ID
JOIN INSIS_CNT_V1.P_STAFF STAFF ON STAFF.STAFF_ID = PLC.STAFF_ID
JOIN INSIS_CNT_V1.P_PEOPLE PPSTAFF ON STAFF.MAN_ID = PPSTAFF.MAN_ID)
LOOP
pipe ROW (typepolicy(I.POLICY_ID, I.POLICY_STATE, I.POLICY_NO, I.INSR_BEGIN, I.INSR_END, I.PRODUCT,
I.MAN_TYPE, I.DEPARTMENT, I.STAFF, I.MAN_ID, I.POLICY_STATE));
END LOOP;
ELSIF client_type = 4 THEN
FOR i IN (SELECT plc.policy_id, LNG.NAME AS POLICY_STATE, PLC.POLICY_NO, PLC.INSR_BEGIN, PLC.INSR_END, INS.NAME AS PRODUCT,
'Застрахованный' AS MAN_TYPE, OFFICE.NAME AS DEPARTMENT, PPSTAFF.NAME AS STAFF, cl.man_id, plc.policy_state
FROM insis_cnt_v1.policy plc
LEFT JOIN INSIS_CNT_V1.INSURED_OBJECT OBJ ON OBJ.POLICY_ID = PLC.POLICY_ID
join INSIS_CNT_V1.O_ACCINSURED cl ON OBJ.OBJECT_ID = CL.OBJECT_ID
join insis_cnt_v1.p_people pp ON pp.man_id = cl.man_id
JOIN INSIS_CNT_V1.cfg_nom_language_table LNG ON LNG.TABLE_NAME = 'HST_POLICY_STATE' AND LNG.ID = PLC.POLICY_STATE AND LNG.LANGUAGE = 'RUSSIAN'
JOIN INSIS_CNT_V1.HT_INSR_TYPE INS ON INS.ID = PLC.INSR_TYPE
JOIN INSIS_CNT_V1.cnt_offices OFFICE ON OFFICE.OFFICE_ID = PLC.OFFICE_ID
JOIN INSIS_CNT_V1.P_STAFF STAFF ON STAFF.STAFF_ID = PLC.STAFF_ID
JOIN INSIS_CNT_V1.P_PEOPLE PPSTAFF ON STAFF.MAN_ID = PPSTAFF.MAN_ID)
LOOP
pipe ROW (typepolicy(I.POLICY_ID, I.POLICY_STATE, I.POLICY_NO, I.INSR_BEGIN, I.INSR_END, I.PRODUCT,
I.MAN_TYPE, I.DEPARTMENT, I.STAFF, I.MAN_ID, I.POLICY_STATE));
END LOOP;
END IF;
END IF;
RETURN;
END;
|
|
|