日期:2014-05-16  浏览次数:20384 次

oracle中使用ddl语言
在ORACLE存储过程中创建临时表

  Java代码

  create or replace procedure select_look

  as

  str varchar2(100);

  begin

  str:='select * from emp';

  execute immediate str;

  end;

  在ORACLE存储过程中创建临时表

  2007年11月15日 星期四 14:27

  Java代码

  create procedure pro

  as

  str varchar2(100);

  begin

  str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME (

  COL1 VARCHAR2(10),

  COL2 NUMBER

  ) ON COMMIT PRESERVE ROWS' ;

  execute immediate str;    --使用动态SQL语句来执行

  end;

  /

  存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行

  --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)

  --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

  Java代码

  CREATE OR REPLACE PROCEDURE temptest

  (p_searchDate IN DATE)

  IS

  v_count INT;

  str varchar2(300);

  BEGIN

  v_count := 0;

  str:='drop table SETT_DAILYTEST';

  execute immediate str;

  /*      str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (

  NACCOUNTID NUMBER not null,

  NSUBACCOUNTID NUMBER not null)

  ON COMMIT PRESERVE ROWS';

  execute immediate str;    ----使用动态SQL语句来执行

  str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';

  execute immediate str;

  END temptest;

  上面建立一个临时表的存储过程

  下面是执行一些操作

  Java代码

  CREATE OR REPLACE PROCEDURE PR_DAILYCHECK

  (

  p_Date IN DATE,

  p_Office IN INTEGER,

  p_Currency IN INTEGER,

  P_Check IN INTEGER,

  p_countNum OUT INTEGER)

  IS

  v_count INT;

  BEGIN

  v_count := 0;

  IF p_Date IS NULL THEN

  dbms_output.put_line('???????????í?ó');

  ELSE

  IF P_Check = 1 THEN

  insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance

  where dtdate = p_Date);

  select

  count(sd.naccountid) into v_count

  from sett_subaccount ss,sett_account sa,sett_dailytest sd

  where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid

  AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency

  and rownum < 2;

  COMMIT;

  p_countNum := v_count;

  dbms_output.put_line(p_countNum);

  END IF;

  IF P_Check = 2 THEN

  insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance

  where dtdate = p_Date);

  select

  count(sd.naccountid) into v_count

  from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd

  where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid

  AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency

  and rownum < 2;

  COMMIT;

  p_countNum := v_count;

  dbms_output.put_line(p_countNum);

  END IF;

  END IF;

  END PR_DAILYCHECK;

  oracel 日期函数

  Java代码

  to_date(substr(ildgl,2,6),'rrDDD')

  insert into scott.f42111 values('mike',600,to_date('2009-04-17 10:17:00','yyyy-mm-dd hh24:mi:ss'))