Paweł
Iwiński
Student,
Politechnika
Rzeszowska im.
Ignacego
Łukasiewicza
Temat: Dynamiczny SQL - klauzula Execute Immediate.
Witajcie, mam problem z klauzulą execute immediate. Otóż muszę wykonać kilka skryptów SQL poprzedzając je tą właśnie klauzlą. Z tego co mi wiadomo to polecenie przyjmuje varchara i może nim być każde polecenie SQL, a w szczególności update, inserty, create i inne nawet where. Niestety w praktyce tylko proste zapytania działają z execute immediate np. zapytanie:EXECUTE IMMEDIATE 'SELECT * FROM Orders'; wykonuje się poprawnie.
W przypadku tych bardziej skomplikowanych zapytań gdzie używany jest np. where lub join występuje błąd składniowy (w połączeniu z execute immediate) - sprawdzałem też w sqldeveloperze. Prawdopodobnie, gdy używa się klauzuli execute immediate wymagana jest nieco inna składnia całego zapytania niż tylko wzięcie w apostrofy głównego zapytania poprzedzając go execute immediate.
Może ktoś z was wie jak powinny wyglądać składniowo poniższe skrypty (z wykorzystaniem execute immediate, bez tej klauzuli zapytania oczywiście są poprawne składniowo).
1. SELECT o.order_id, c.customer_id, FROM orders o JOIN customers c ON (o.customer_id = c.customer_id);
2. UPDATE orders SET ORDER_TOTAL = ORDER_TOTAL * 1.01 WHERE (ORDER_ID > 3670 AND ORDER_ID < 4000);
Zbudowanie zapytania np. w ten sposób jest niepoprawne: EXECUTE IMMEDIATE ' UPDATE orders SET ORDER_TOTAL = ORDER_TOTAL * 1.01 WHERE (ORDER_ID > 3670 AND ORDER_ID < 4000)';
ale takie zapytanie już działa: EXECUTE IMMEDIATE 'SELECT * FROM Orders'; (ten przykład był podany przeze mnie wyżej, ale podaję jeszcze raz dla jasności).
Z góry dzięki za odpowiedzi.