Oracle的几个Function实例

create or replace function str_list2( key_name in varchar2,
                    key  in varchar2,
                    coname in varchar2,
                    tname     in varchar2 )
 return varchar2
as
    type rc  is ref cursor;
    str    varchar2(4000);
    sep    varchar2(2);
    val    varchar2(4000);
    cur    rc;
begin
    open cur for 'select '||coname||'
                    from '|| tname || '
                    where ' || key_name || ' = :x '
                using key;
    loop
        fetch cur into val;
        exit when cur%notfound;
        str := str || sep || val;
        sep := ', ';
    end loop;
    close cur;
    return str;
end;


create or replace function ip_int2string(intip number) return varchar2 is
   
  Result varchar2(15);
  min_int number;
  temp number;
  temp1 number;
  temp2 number;
  temp3 number;
  temp4 number;
  flag number;
 
begin
  min_int:=-2147483648;
  if intip<min_int or intip>2147483647 then
     raise_application_error(-20020,'[IPMS] Illegal int IP!');
  end if;
 
  if intip<0 then
     temp:=intip-min_int;
     flag:=0;
  else
     temp:=intip;
     flag:=1;
  end if;
 
  temp1:= bitand(floor(temp/(2**24)),255);--右移24位,进行与运算
  temp2:= bitand(floor(temp/(2**16)),255);--右移16位,进行与运算
  temp3:= bitand(floor(temp/(2**8)),255);--右移8位,进行与运算
  temp4:= bitand(temp,255);--进行与运算
 
  if flag=1 then
     temp1:=temp1+128;
  end if;
 
  Result:=temp1||'.'||temp2||'.'||temp3||'.'||temp4;
  dbms_output.put_line(Result);
  return(Result);
 
  exception
      when others then
       raise_application_error(-20020,'[IPMS] Illegal int IP!');
      
end ip_int2string;

create or replace function ip_string2int(stringip varchar2) return number is
   
  Result number;
  min_int number;
  ip1 number;
  ip2 number;
  ip3 number;
  ip4 number;
 
  pos1 number;
  pos2 number;
  pos3 number;
 
  temp1 raw(32);
  temp2 raw(32);
  temp3 raw(32);
  temp4 raw(32);
  temp number;
  flag number;
begin
  min_int:=-2147483648;
  Result:=0;
  pos1:=instr(stringip,'.',1,1);
  pos2:=instr(stringip,'.',1,2);
  pos3:=instr(stringip,'.',1,3);
  if pos1=0 or pos2=0 or pos3=0 then
       raise_application_error(-20020,'Illegal IP format!');
  else
       ip1:=to_number(substr(stringip,1,pos1-1));
       ip2:=to_number(substr(stringip,pos1+1,pos2-pos1));
       ip3:=to_number(substr(stringip,pos2+1,pos3-pos2));
       ip4:=to_number(substr(stringip,pos3+1,length(stringip)-pos3));
       if ip1<0 or ip1>255 or ip2<0 or ip2>255 or ip3<0 or ip3>255 or ip4<0 or ip4>255 then
          raise_application_error(-20020,'[IPMS] Illegal IP format!');
       end if;
      
       ip2:=ip2*(2**16);--左移16位
       ip3:=ip3*(2**8);--左移8位
             
       if ip1>127 then
          ip1:=ip1*(2**24)+min_int;--左移24位
          flag:=1;
       else
            ip1:=ip1*(2**24);--左移24位
            flag:=0;
       end if;
        
       temp1:= utl_raw.cast_from_binary_integer(ip1);
       temp2:= utl_raw.cast_from_binary_integer(ip2);
       temp3:= utl_raw.cast_from_binary_integer(ip3);
       temp4:= utl_raw.cast_from_binary_integer(ip4);
       --或运算
       temp:= utl_raw.cast_to_binary_integer(utl_raw.bit_or(utl_raw.bit_or(utl_raw.bit_or(temp1,temp2),temp3),temp4));
      
       if flag=1 then
           Result:= temp;
       elsif flag=0 then
           Result:= temp+min_int;
       end if;
  end if;
  dbms_output.put_line(Result);
  return(Result);
 
  exception
      when others then
       raise_application_error(-20020,'[IPMS] Illegal IP format!');
 
end ip_string2int;

CREATE OR REPLACE FUNCTION get_short_name(
   init_name VARCHAR2
)
RETURN VARCHAR2
   IS
   short_name   VARCHAR2(1000);
BEGIN
   short_name := init_name;
   IF INSTR(short_name,'TenGigabitEthernet') >0 THEN
      short_name := REPLACE(short_name,'TenGigabitEthernet','TGE');
   END IF;
      IF INSTR(short_name,'TenGigE') >0 THEN
      short_name := REPLACE(short_name,'TenGigE','TGE');
   END IF;
      IF INSTR(short_name,'FastEthernet') >0 THEN
      short_name := REPLACE(short_name,'FastEthernet','FE');
   END IF;
      IF INSTR(short_name,'port-fei') >0 THEN
      short_name := REPLACE(short_name,'port-fei','"FE');
   END IF;
      IF INSTR(short_name,'GigabitEthernet') >0 THEN
      short_name := REPLACE(short_name,'GigabitEthernet','GE');
   END IF;
      IF INSTR(short_name,'Gig Ethernet') >0 THEN
      short_name := REPLACE(short_name,'Gig Ethernet','GE');
   END IF;
      IF INSTR(short_name,'Gigabit-ethernet') >0 THEN
      short_name := REPLACE(short_name,'Gigabit-ethernet','GE');
   END IF;
         IF INSTR(short_name,'GigaEthernet') >0 THEN
      short_name := REPLACE(short_name,'GigaEthernet','GE');
   END IF;
         IF INSTR(short_name,'port-gei') >0 THEN
      short_name := REPLACE(short_name,'port-gei','GE');
   END IF;
   RETURN short_name;
END    get_short_name;

CREATE OR REPLACE FUNCTION F_TEMPLETEID_TO_DEVCOLLECT (P_TEMPLETEID IN NUMBER) RETURN VARCHAR2 IS
     V_DEVNAME_LIST VARCHAR2(4000);
     STR VARCHAR2 (3)   DEFAULT NULL;
     str_length  number;
     CURSOR CUR IS SELECT C.DEVICENAME
  FROM RPT_USER_TEMPLET A, RPT_TEMPLET_OBJECT B, MR_DEVINFO_DIM C
  WHERE A.ID = B.USERTEMPLET_ID AND B.OBJID = C.DEVICEID AND A.ID = P_TEMPLETEID
  order by C.DEVICENAME;
BEGIN
  STR := '; ' || CHR(13);
  str_length := 0;
     FOR REC IN CUR LOOP
           str_length:= str_length + 3 + length(REC.DEVICENAME);
           if str_length < 3500 then
             V_DEVNAME_LIST := V_DEVNAME_LIST || REC.DEVICENAME || STR;
           end if;
          EXIT WHEN CUR%NOTFOUND;
     END LOOP;
     RETURN V_DEVNAME_LIST;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN RETURN NULL;
     WHEN OTHERS THEN RETURN NULL;
END F_TEMPLETEID_TO_DEVCOLLECT;

CREATE OR REPLACE FUNCTION F_Customer_Ip(cid IN VARCHAR2) RETURN VARCHAR2 IS
     V_IP_LIST VARCHAR2(500);
     CURSOR CUR IS
  SELECT ip_address FROM NFA_SYS_SUACCOUNT_VIEW@guankong.zznode
  WHERE serial_no = cid
  ORDER BY ip_address;
BEGIN
  V_IP_LIST := NULL;
     FOR REC IN CUR LOOP
      EXIT WHEN CUR%NOTFOUND;
    IF V_IP_LIST IS NULL THEN
             V_IP_LIST := REC.ip_address;
   ELSE
      V_IP_LIST := V_IP_LIST||','||REC.ip_address;
   END IF;
     END LOOP;
     RETURN V_IP_LIST;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN RETURN NULL;
     WHEN OTHERS THEN RETURN NULL;
END F_Customer_Ip;

转载自:http://blog.sina.com.cn/s/blog_4f925fc30100rprp.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Docker 中创建多个 Oracle 实例,可以按照以下步骤进行操作: 1. 首先,需要下载并安装 Oracle Database 镜像。可以从 Docker Hub 上下载官方的 Oracle Database 镜像,也可以使用第三方镜像。具体操作步骤可以参考官方文档。 2. 下载并安装 Docker。 3. 创建一个 Docker 容器来运行 Oracle Database。可以使用以下命令: ``` docker run --name oracle1 -p 1521:1521 -e ORACLE_SID=ORCL1 -e ORACLE_PDB=PDB1 -e ORACLE_PWD=oracle -v /opt/oracle/oradata/orcl1:/opt/oracle/oradata oracle/database:12.2.0.1-ee ``` 其中,`--name` 参数指定容器的名称,`-p` 参数指定容器的端口映射,`-e` 参数指定 Oracle 实例的配置信息,`-v` 参数指定容器的数据卷映射。这里使用了 `ORCL1` 作为实例名称,`PDB1` 作为 Pluggable Database 名称。同样的,可以创建多个实例,只需要修改对应的参数即可。 4. 等待容器启动完成,可以通过以下命令进入容器: ``` docker exec -it oracle1 bash ``` 5. 在容器中使用 `sqlplus` 命令连接到 Oracle 数据库,进行数据库的初始化和配置。同样的,可以为每个实例创建对应的用户、表空间等等。 6. 如果需要创建多个实例,可以使用类似的命令创建多个容器。只需要修改对应的参数,如容器名称、端口映射、实例名称等等。 以上就是在 Docker 中创建多个 Oracle 实例的基本步骤。需要注意的是,在 Docker 中运行 Oracle 数据库可能会涉及到一些性能和安全方面的问题,需要谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值