Forum OpenACS Q&A: Response to Installation of ACS 4.2 and Oracle 9i on Linux

DELETE has always been a reserved word in PL/SQL; also, NEW has been a reserved word since Oracle8.0 and there are many packages in ACS4.x that (re)define a procedure/function NEW. Now, PL/SQL as a block-structured programming language should obey the rules of scope and allow e.g. a procedure named DELETE inside a package named ACS_CONTENT. At least that is what Oracle 8.1.6 does. (Although I personally consider it a bad style to redefine reserved words in a programming language).

Since I don't have access to Oracle9i, could somebody (Robert?) run the following test and let us know what happens? Oracle8.1.6 for SUN Solaris allows the re-definition of the DELETE and NEW reserved words inside a user-defined package.


-- A package to test if the running Oracle version allows redefinition of the
-- NEW and DELETE reserved words
create or replace package test1 as
  function new (
    db_ver out VARCHAR2, 
    db_compatible out VARCHAR2
  ) return VARCHAR2;

  procedure delete(
    db_ver out VARCHAR2,
    db_compatible out VARCHAR2
  );
end test1;
/
show errors;
create or replace package body test1 as
  function new(
    db_ver out VARCHAR2, 
    db_compatible out VARCHAR2
  ) return VARCHAR2
  is 
  begin
    dbms_utility.db_version(db_ver,db_compatible);
    return 'User-defined function NEW allowed in Version '||db_ver;
  end new;
  
  procedure delete (
    db_ver out VARCHAR2,
    db_compatible out VARCHAR2
  )
  is
  begin
    dbms_utility.db_version(db_ver,db_compatible);
  end delete;    
end test1;
/
show errors;
set serveroutput on format wrapped size 1000000
declare 
 db_ver VARCHAR2(12);
 db_compatible VARCHAR2(12);
begin
test1.delete(db_ver,db_compatible);
dbms_output.put_line('User-defined procedure DELETE allowed in Version '||db_ver);
dbms_output.put_line(test1.new(db_ver,db_compatible));
end;
/