/ / Oracle „do” klauzula w wersji Oracle poniżej 11g - oracle, plsql

Klauzula Oracle "do" w wersji Oracle poniżej 11g - oracle, plsql

Mam anonimowy blok pl / sql jak poniżej

declare
v_count pls_integer := 0;
begin
select count(1) from product_component_version
into v_count
where product like "%Enterprise%";
if v_count = 0 then
raise program_error;
end if;
exception
when program_error then
raise_application_error (-20001, "This is valid for Oracle Enterprise Edition         only!");
end;

Kiedy próbuję wykonać powyższe, pojawia się następujący błąd

ORA-06550: line 5, column 5:
PL/SQL: ORA-00933: SQL command not properly ended

Co jest niczym innym jak wyrażeniem „into v_count”.

Zgodnie z moim rozumieniem składnia jest niepoprawna i kiedy zmieniłem ten status tak jak poniżej, działa dobrze.

select count(1) into v_count
from product_component_version
where product like "%Enterprise%";

Przetestowałem to w „Oracle Database 11g Enterprise Edition 11.2.0.1.0 - wersja 64-bitowa”.

Ale oryginalny skrypt jest dostępny we wszystkich naszychstarsze wersje naszego produktu. Chciałbym wiedzieć, że składnia oryginalnego skryptu jest obsługiwana w starszych wersjach Oracle? Czy może proszę o podanie jakichkolwiek informacji na ten temat, które mogą rozwiązać mój problem?

Dzięki, Vijay

Odpowiedzi:

3 dla odpowiedzi № 1

Z blokiem testowym:

declare
x dual.dummy%type;
begin
select dummy from dual into x;
end;
/

W Oracle 9iR2 (9.2.0.8 w systemie Solaris), 10gR2 (10.2.0.5 w systemie Solaris) i 11gR2 (11.2.0.3 w systemie Linux) otrzymuję dokładnie ten sam błąd:

    select dummy from dual into x;
*
ERROR at line 4:
ORA-06550: line 4, column 28:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored

Nie sądzę, aby kiedykolwiek był obsługiwany tak, jak miałeś go, chociaż nie mam bazy danych 8i lub wcześniejszej do przetestowania.

Powiedziałeś „oryginalny skrypt jest dostępny we wszystkichnasze starsze wersje naszego produktu ”, ale czy rzeczywiście kiedykolwiek zostałby uruchomiony, a jeśli tak, czy możesz zidentyfikować dokładną wersję, w której nie pojawił się błąd?


2 dla odpowiedzi nr 2

Przynajmniej nie od 8i: http://www.oracle.com/pls/tahiti/tahiti.tabbed?section=49135


0 dla odpowiedzi № 3

Nawet nie mam nic przeciwko wybieraniu manekina z dualnego na x;

Spróbuj tego:

declare
v_count pls_integer := 0;
begin
select count(1) into v_count from product_component_version

where product like "%Enterprise%";
if v_count = 0 then
raise program_error;
end if;
exception
when program_error then
raise_application_error (-20001, "This is valid for Oracle Enterprise Edition         only!");
end;