首页 > 数据库 >lightdb oracle package兼容

lightdb oracle package兼容

时间:2023-08-15 19:55:23浏览次数:50  
标签:return lightdb language package dept user oracle table type

lightdb对oracle package的兼容性还是不错的,大部分都已经支持。如下:

-- 创建oracle模式数据库
zjh@postgres=# create database ora_db3 lightdb_syntax_compatible_typE=oracle;
NOTICE:  auto create user "ora_db3" success
CREATE DATABASE

\c ora_db3
--删除表
drop table appl_application_sbfp;
drop table sys_user_info;
 
--创建表和主键
CREATE TABLE appl_application_sbfp (
    application_no   varchar(32) NOT NULL ,
    customer_id      varchar(32) NOT NULL,
    customer_name    varchar(32) NOT NULL,
    input_user_id    varchar(32) NOT NULL,
    PRIMARY KEY (application_no)
);
CREATE TABLE sys_user_info (
    user_id          varchar(32) NOT NULL ,
    user_name        varchar(32) NOT NULL,
    pass_word        varchar(32),--default null
    org_id           varchar(32),
    PRIMARY KEY (user_id)
);

insert into appl_application_sbfp(application_no,customer_id,customer_name,input_user_id)
values('APPL20190603','c20190603','王平','WANGLI');
insert into appl_application_sbfp(application_no,customer_id,customer_name,input_user_id)
values('APPL20190604','c20190604','张平','WANGLI');
insert into sys_user_info(user_id,user_name)
values('WANGLI','王丽');
 
-- 创建包、包体、存储函数
drop package body PA_GLOBAL;
drop package PA_GLOBAL;
create or replace package PA_GLOBAL is
FUNCTION getUserName(user_id IN varchar2) RETURN varchar2;
end PA_GLOBAL;
/

create or replace package body PA_GLOBAL is
FUNCTION getUserName(user_id IN varchar2) RETURN varchar2
is 
userName varchar2(200);
BEGIN
  SELECT user_name into userName from sys_user_info;
  return userName;
END getUserName;
BEGIN    
  dbms_output.put_line('Control is now executing the package initialization part');   -- package初始化块必须在最后
end PA_GLOBAL;
/
begin
  perform PA_GLOBAL.getUserName('abc');
end;
/

package级别变量--存储在lt_variable中

CREATE OR REPLACE PACKAGE my_globals 
IS 
   g_fav_language   VARCHAR2 (6) := 'PL/SQL'; 
 
   PROCEDURE show_fav_languages; 
END;
/

CREATE OR REPLACE PACKAGE BODY my_globals 
IS 
   PROCEDURE show_fav_languages 
   IS 
      l_fav_language   VARCHAR2 (6) := 'SQL'; 
   BEGIN 
      DBMS_OUTPUT.put_line ('* Local favorite language ' || l_fav_language); 
      DBMS_OUTPUT.put_line ( 
         '* Global favorite language ' || my_globals.g_fav_language); 
   END; 
END;
/
BEGIN 
   DBMS_OUTPUT.PUT_LINE ('Initial values'); 
   my_globals.show_fav_languages; 
   DBMS_OUTPUT.PUT_LINE ('Global value changed'); 
   my_globals.g_fav_language := 'SQL'; 
   my_globals.show_fav_languages; 
END;
/

* Local favorite language SQL
* Global favorite language PL/SQL
* Local favorite language SQL
* Global favorite language SQL
DO

zjh@ora_db=# BEGIN 
   
   my_globals.show_fav_languages; 
   
   my_globals.g_fav_language := 'SQL'; 
   my_globals.show_fav_languages; 
END; 
/
* Local favorite language SQL
* Global favorite language SQL
* Local favorite language SQL
* Global favorite language SQL
DO

package级别自定义类型--23.3开始支持出参为关联数组类型和create type xxx is/as object

zjh@ora_db2=# 
zjh@ora_db2=# CREATE OR REPLACE PACKAGE EMP_PKG 
zjh@ora_db2-# IS
zjh@ora_db2$#   TYPE emp_table_type IS TABLE OF emp%ROWTYPE  INDEX BY BINARY_INTEGER;   -- binary_integer为lightdb不支持类型
zjh@ora_db2$#   
zjh@ora_db2$#   PROCEDURE read_emp_table (p_emp_table OUT emp_table_type);
zjh@ora_db2$# END EMP_PKG;
zjh@ora_db2$# /
ERROR:  unsupported table index type
zjh@ora_db2=# CREATE OR REPLACE PACKAGE EMP_PKG 
IS
  TYPE emp_table_type IS TABLE OF emp%ROWTYPE  INDEX BY INTEGER;
  
  PROCEDURE read_emp_table (p_emp_table OUT emp_table_type);
END EMP_PKG;
/
ERROR:  SQL function cannot accept associative arrays type "emp_table_type" -- 23.2之前的版本不支持关联数组作为参数
1.返回类型为pipelined table。  

create or REPLACE type dept_obj is OBJECT( DEPTNO NUMBER(2,0), DNAME VARCHAR2(14 BYTE) ); -- is object从23.3开始支持

create or REPLACE type dept_obj_type AS table of dept_obj;

2.定义package 和package body。

create or replace package SPTest
is
/*return a pipelined demo start*/
type dept_data_rec_type is RECORD(
  DEPTNO NUMBER(2,0),
     DNAME VARCHAR2(14)
);

type dept_ref_type is REF CURSOR;

function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined;
/*return a pipelined demo end*/

/*return a cursor demo start*/
FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type;
/*return a cursor demo end*/

/* return a varchar value start */
function getName(in_deptno in number) RETURN VARCHAR2;
/* return a varchar value end */
end SPTest;
/
-----------------------------------------------------------------------------------------------
create or replace package body SPTest
is
  /*return a pipelined demo start*/
  function getDept(in_loc IN VARCHAR2) return dept_obj_type pipelined is
    l_dept_obj dept_obj :=dept_obj(null, null);
    dept_ref_type_cursor dept_ref_type;
    dept_data_rec        dept_data_rec_type;
  begin
    open dept_ref_type_cursor
    for select deptno, dname from dept where loc = in_loc;
   
    loop
    fetch dept_ref_type_cursor into dept_data_rec;
    exit when dept_ref_type_cursor%NOTFOUND;
    l_dept_obj.DEPTNO := dept_data_rec.DEPTNO;
    l_dept_obj.DNAME := dept_data_rec.DNAME;
   
    pipe row(l_dept_obj);
    end loop;
    close dept_ref_type_cursor;
    RETURN ;
  end getDept;
  /*return a pipelined demo end*/
  
  /*return a cursor demo start*/
  FUNCTION getDeptInfo(in_deptno IN dept.deptno%TYPE) RETURN dept_ref_type
  AS
          dept_ref_type_cursor dept_ref_type;        
     BEGIN
    
     OPEN dept_ref_type_cursor FOR
          SELECT deptno, dname, loc FROM dept where deptno = in_deptno;
    
     RETURN dept_ref_type_cursor;
    
     END getDeptInfo;
  /*return a cursor demo end*/
  
  /* return a varchar value start */
  function getName(in_deptno in number) RETURN VARCHAR2
  as rtn_deptname VARCHAR2(100);
  begin
    select dname into rtn_deptname from dept where deptno = in_deptno;
    RETURN rtn_deptname;
  end getName;
  /* return a varchar value start */
  
end SPTest;
/

最后,执行存储过程。
/*返回pipelined table */
select deptno, dname from table(SPTest.getDept('NEW YORK')) order by deptno;

/*返回cursor*/
select SPTest.getDeptInfo(10) from dual;

/*返回具体值*/
select SPTest.getName(50) from dual;

 

标签:return,lightdb,language,package,dept,user,oracle,table,type
From: https://www.cnblogs.com/lightdb/p/17580506.html

相关文章

  • Oracle 重建口令文件
    介绍在管理Oracle的过程中,极少数情况会遇到口令文件的丢失,导致数据库无法正常使用。这时,就需要用到orapw命令来重建口令文件了。语法ORAPWDFILE=filename[PASSWORD=password][ENTRIES=numusers][FORCE={Y|N}][IGNORECASE={Y|N}]参数说明:FILE必选参数,口令文件的名称PASSWORD......
  • oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户
    oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户news2023/8/1413:13:55概述有朋友问到如何查出表空间都被哪些用户使用的一些方法,因为有几种情况需要考虑,也顺便做个总结。需求:如何查看共用一个表空间的所有用户查看某表空间下表的所有者使用dba用户......
  • burpsuite靶场----SQL注入3----oracle的union注出版本
    burpsuite靶场----SQL注入3----oracle注入推荐burpsuite插件https://github.com/smxiazi/xia_sqllinux上安装oraclemysql的详细学习可以下载小皮面板或者手动安装oracle这里使用docker安装,因为oracle手动安装比较麻烦这里我参照这位师傅的博客在linux上搭建oracle数据库ht......
  • burpsuite靶场----SQL注入5----非oracle数据库注入出敏感数据
    burpsuite靶场----SQL注入5----非oracle数据库注入出敏感数据靶场地址https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-non-oracle避坑1.发现不能用%23作为注释符'unionselect'a','b'%23会报错2.发现不能......
  • Oracle启动监听报错:The listener supports no services或出现 unknown状态解决
    1、查看$ORACLE_HOME/network/admin/listener.ora文件中的host是否正确,能不能ping通2、查看$ORACLE_HOME/network/admin/tnsnames.ora文件中的host是否与listener.ora中的一致3、查看/etc/hosts文件中的127.0.0.1是不是localhost,listener.ora中host跟这里的是否一样4、登录数......
  • Oracle数据库基本介绍
    一、Oracle数据库1.1、基本介绍Oracle数据库的一个基本任务是存储数据。Oracle数据库服务器是由一个数据库和至少一个数据库实例组成。数据库是一组存储的文件,而数据库实例是一组管理数据文件的内存结构。另外,数据库由后台进程组成。一个数据库和一个实例是紧密相连的,因此术语-......
  • 在postgresql数据库中如何实现Oracle中dblink功能
    转:https://blog.csdn.net/weixin_73350116/article/details/131905912引言在Oracle中常常有dblink功能,可以通过dblinks实现不同地址下得oracle数据库得数据交互。dblink是Oracle独有得功能,其他数据库有吗?当然,在postgresql也可以通过fdw实现与其他数据库进行数据交互,并且相较于O......
  • npm 更改package.json 中依赖包前缀
    ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0 *这意味着安装最新版本的依赖包 推荐使用~ npmconfigsetsave-prefix='~'......
  • Windows卸载Oracle
    1\删除regeditHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\oracle*HKEY_LOCAL_MACHINE\SOFTWARE\oracle*HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\oracle*2\删除环境变量后重启电脑3\删除oracle*文件\开始菜单......
  • 使用 ASM 和版本升级安装 Oracle 19C RAC 的分步指南
    一、概述本文档将指导您在Linux平台上使用ASM逐步安装Oracle19CRAC。这里讨论每一步。我们将RAC安装与ASM配合并进行版本升级。遵循的步骤–服务器配置配置OracleASM预检查RAC设置为RAC安装GRID基础设施安装Oracle19C数据库版本升级/PSU......