分类目录归档:EBS PLSQL开发

Oracle PLSQL Json类接口例子

说明:此段例子程序来源公司闫同事,需要json安装文件的,可留言索取。

例子程序:

–物料LIST结果解析
DECLARE
  l_item_info json;
  l_item_list json_list;
  l_item_line json;

  l_ret_code       VARCHAR2(100);
  l_ret_msg        VARCHAR2(100);
  l_json_list_data json_list;
  l_temp_line      json;
  l_erpcode        VARCHAR2(100);
  l_itemno         VARCHAR2(100);
  l_type           VARCHAR2(100);

BEGIN
  l_item_info := json();

  l_item_info.put('code',
                  '1');
  l_item_info.put('message',
                  '调用成功');

  l_item_list := json_list();

  –物料1
  l_item_line := json();
  l_item_line.put('erpCode',
                  '10000001');
  l_item_line.put('itemNo',
                  '22222222222');
  l_item_line.put('type',
                  '4');
  dbms_output.put_line(json_ext.get_string(l_item_line,
                                           'erpCode') || '是:');
  l_item_line.print;
  dbms_output.put_line('—————————–');
  l_item_list.append(l_item_line.to_json_value);

  –物料2
  l_item_line := json();
  l_item_line.put('erpCode',
                  '10000003');
  l_item_line.put('itemNo',
                  '333333333333');
  l_item_line.put('type',
                  '2');
  dbms_output.put_line(json_ext.get_string(l_item_line,
                                           'erpCode') || '是:');
  l_item_line.print;
  dbms_output.put_line('—————————–');
  l_item_list.append(l_item_line.to_json_value);

  –物料LIST构成
  dbms_output.put_line('l_item_list是:');
  l_item_list.print;
  dbms_output.put_line('—————————–');

  –返回结果整体构成
  l_item_info.put('data',
                  l_item_list.to_json_value);
  dbms_output.put_line('l_item_info是:');
  l_item_info.print;
  dbms_output.put_line('—————————–');

  –返回结果解析
  l_ret_code := json_ext.get_string(l_item_info,
                                    'code');
  l_ret_msg  := json_ext.get_string(l_item_info,
                                    'message');

  dbms_output.put_line('解析结果:');
  dbms_output.put_line('l_ret_code: ' || l_ret_code);
  dbms_output.put_line('l_ret_msg: ' || l_ret_msg);

  IF l_ret_code = '1' THEN
    l_json_list_data := json_list(l_item_info.get('data'));
 
    FOR i IN 1 .. l_json_list_data.count()
    LOOP
      l_temp_line := json(l_json_list_data.get(i));
   
      l_erpcode := json_ext.get_string(l_temp_line,
                                       'erpCode');
      l_itemno  := json_ext.get_string(l_temp_line,
                                       'itemNo');
      l_type    := json_ext.get_string(l_temp_line,
                                       'type');
   
      dbms_output.put_line('l_erpcode: ' || l_erpcode);
      dbms_output.put_line('l_itemNo: ' || l_itemno);
      dbms_output.put_line('l_type: ' || l_type);
   
    END LOOP;
 
  END IF;

END;

——————————————————————————

以下是输出结果:

10000001是:
{
  "erpCode" : "10000001",
  "itemNo" : "22222222222",
  "type" : "4"
}
—————————–
10000003是:
{
  "erpCode" : "10000003",
  "itemNo" : "333333333333",
  "type" : "2"
}
—————————–
l_item_list是:
[{
  "erpCode" : "10000001",
  "itemNo" : "22222222222",
  "type" : "4"
}, {
  "erpCode" : "10000003",
  "itemNo" : "333333333333",
  "type" : "2"
}]
—————————–
l_item_info是:
{
  "code" : "1",
  "message" : "\u8C03\u7528\u6210\u529F",
  "data" : [{
    "erpCode" : "10000001",
    "itemNo" : "22222222222",
    "type" : "4"
  }, {
    "erpCode" : "10000003",
    "itemNo" : "333333333333",
    "type" : "2"
  }]
}
—————————–
解析结果:
l_ret_code: 1
l_ret_msg: 调用成功
l_erpcode: 10000001
l_itemNo: 22222222222
l_type: 4
l_erpcode: 10000003
l_itemNo: 333333333333
l_type: 2

Oracle创建Job命令

–获取时间和序列
create sequence numbincrease_s;
create table machineTime(seq number,mtime date);

–存储过程
create or replace procedure getMachineTime as
begin
  insert into machineTime values (numbincrease_s.nextval,sysdate);
  commit;
end;

–定义jobs调用上述存储过程,为了看出效果一分钟执行一次
declare
  jobs number;
begin
  sys.dbms_job.submit(jobs, 'getMachineTime;', sysdate, 'sysdate+1/1440');
  commit;
end;

–删除Job
/*begin
  –select job from user_jobs;
  sys.dbms_job.remove(108); –job_id
  commit;
end;*/

–select * from dba_jobs;
–select * from all_jobs;
–select * from user_jobs;

–下面是带参数的存储过程的调用
/*begin
  sys.dbms_job.submit(job => :job,
                      what => 'declare s1 varchar2(200); s2 varchar2(200); begin xxx.xxxxxx(s1,s2); end;',
                      next_date => sysdate,
                      interval => 'sysdate+1/1440');
  commit;
end;*/
–调用系统定义的存储过程类似上述方式。

并发程序连续调用带有模板的请求

    昨天在做一个客户化功能的时候,我想实现的是一个程序包中有3个procedure,这3个procedure均被做为单独的并发请求,其中主请求是单纯的功能,两个子请求是针对此功能做的两个报表程序。我希望在主请求完成以后,连续调用两个子请求完成带有rtf模板的报表输出。如下图所示,在加载模板后,再调用请求执行,却发现只能正确执行前面并发请求的模板加载并成功输出,后面的并发请求能执行,但是不能加载模板文件,只能输出XML文件。

      连续调用加载模板

   于是尝试了下面的做法,如图所示,正确的做法是,在A做先调用B子程序,然后在子程序B中去调用C程序,这样便可将两个子程序B、C的模板正常加载完成(目前测试结果,求大家更深层次的指导)。

      思路