Давайте проверим с помощью SQL * Plus, чтобы вы могли точно определить, в каком месте парсер ожидает правильную скобку:
SQL> create table ap_master(payee_address_zip,check_date,cmcl_bank_cleared)
2 as
3 select 1,sysdate,sysdate+1 from dual
4 /
Table created.
SQL> var DaysParam number
SQL> exec :DaysParam := 1
PL/SQL procedure successfully completed.
SQL> select payee_address_zip
2 , EXTRACT(WEEKDAY FROM check_date) as DOW
3 , (cmcl_bank_cleared - check_date) as DateDiff
4 from AP_Master
5 where (cmcl_bank_cleared is not null)
6 AND ((cmcl_bank_cleared - check_date) >=:DaysParam)order by payee_address_zip, DOW, DateDiff
7 /
, EXTRACT(WEEKDAY FROM check_date) as DOW
*
ERROR at line 2:
ORA-00907: missing right parenthesis
Итак, что-то с вашей функцией EXTRACT.Это соответствующая документация по функции EXTRACT (datetime):
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions059.htm#sthref1117
В ней не упоминается ваше ключевое слово WEEKDAY.Вы можете получить день недели, используя функцию TO_CHAR.Я не знаю, какой элемент формата даты вы хотите точно.Я думаю, «D» или «ДЕНЬ».Вы можете посмотреть их здесь:
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#CDEHIFJA
Если вы измените выражение EXTRACT и замените его на TO_CHAR, оно будет работать:
SQL> select payee_address_zip
2 , to_char(check_date,'d') as DOW
3 , (cmcl_bank_cleared - check_date) as DateDiff
4 from AP_Master
5 where (cmcl_bank_cleared is not null)
6 AND ((cmcl_bank_cleared - check_date) >=:DaysParam)order by payee_address_zip, DOW, DateDiff
7 /
PAYEE_ADDRESS_ZIP D DATEDIFF
----------------- - ----------
1 4 1
1 row selected.
С уважением,
Роб.