FlyingZC opened a new issue, #27064:
URL: https://github.com/apache/shardingsphere/issues/27064

   # Background
   Hi community,
   This issue is for #26878.
   
   ShardingSphere parser engine helps users parse a SQL to get the AST 
(Abstract Syntax Tree) and visit this tree to get SQLStatement (Java Object). 
Currently, we are planning to enhance the support for Oracle SQL parsing in 
ShardingSphere.
   
   More details:
   
https://shardingsphere.apache.org/document/current/en/reference/sharding/parse/
   
   # Task
   This issue is to support more oracle sql parse, as follows:
   ```sql
   CREATE OR REPLACE PACKAGE BODY pkg IS
     PRAGMA SERIALLY_REUSABLE;
   BEGIN
     n := 5;
   END;
   ```
   
   ```sql
   CREATE OR REPLACE PACKAGE BODY refcur_pkg IS
     FUNCTION f_trans (p refcur_t) RETURN outrecset PIPELINED IS
       out_rec outrec_typ;
       in_rec  p%ROWTYPE;
     BEGIN
       LOOP
         FETCH p INTO in_rec;  -- input row
         EXIT WHEN p%NOTFOUND;
   
         out_rec.var_num := in_rec.employee_id;
         out_rec.var_char1 := in_rec.first_name;
         out_rec.var_char2 := in_rec.last_name;
         PIPE ROW(out_rec);  -- first transformed output row
   
         out_rec.var_char1 := in_rec.email;
         out_rec.var_char2 := in_rec.phone_number;
         PIPE ROW(out_rec);  -- second transformed output row
       END LOOP;
       CLOSE p;
       RETURN;
     END f_trans;
   END refcur_pkg;
   ```
   
   ```sql
   CREATE OR REPLACE PACKAGE My_Types AUTHID DEFINER IS
     TYPE My_Rec IS RECORD (a NUMBER, b NUMBER);
     FUNCTION Init_My_Rec RETURN My_Rec;
   END My_Types;
   ```
   
   ```sql
   CREATE OR REPLACE PACKAGE department_pkg IS
    
     TYPE dept_info_record IS RECORD (
       dept_name  departments.department_name%TYPE,
       mgr_name   employees.last_name%TYPE,
       dept_size  PLS_INTEGER
     );
    
     -- Function declaration
    
     FUNCTION get_dept_info (dept_id PLS_INTEGER)
       RETURN dept_info_record
       RESULT_CACHE;
    
   END department_pkg;
   ```
   
   ```sql
   CREATE OR REPLACE PACKAGE pkg1 AS
     m NUMBER;
     TYPE t1 IS RECORD (a NUMBER);
     v1 t1;
     TYPE t2 IS TABLE OF t1 INDEX BY PLS_INTEGER;
     v2 t2; 
     FUNCTION f1 (p1 NUMBER) RETURN t1;
     FUNCTION f2 (q1 NUMBER) RETURN t2;
   END pkg1;
   ```
   
   # Process
   1. First confirm that this is a correct oracle sql syntax, if not please 
ignore;
   2. Compare SQL definitions in Oficial SQL Doc and ShardingSphere SQL Doc;
   3. If there is any difference in ShardingSphere SQL Doc, please correct them 
by referring to the Official SQL Doc;
   4. Run mvn install the current_file_module;
   5. Check whether there are any exceptions. If indeed, please fix them. 
(Especially xxxVisitor.class);
   6. Add new corresponding SQL case in SQL Cases and expected parsed result in 
Expected Statment XML;
   7. Run SQLParserParameterizedTest to make sure no exceptions.
   
   # Relevant Skills
   1. Master JAVA language
   2. Have a basic understanding of Antlr `g4` file
   3. Be familiar with Oracle SQLs


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: 
[email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to