1. 程式人生 > >對於儲存過程中表名是變數的遊標使用

對於儲存過程中表名是變數的遊標使用

CREATE OR REPLACE PROCEDURE DAY_LOGIN
IS
TYPE cur_type IS REF CURSOR;
in_date VARCHAR2(40);  --時間
y_date VARCHAR2(40);
t_date varchar2(40);
table_name varchar2(80);
stat_time VARCHAR2(40);  --時間
end_time VARCHAR2(40);  --時間
file_name varchar2(80);
my_cur cur_type;
ACC_PHONE varchar2(100);
ACC_AREACODE varchar2(100);
ACC_APPVERSION varchar2(100);
ACC_CREATETIME varchar2(100);
dyna_sql varchar2(1000);
testjiao_handle UTL_FILE.file_type;

BEGIN
  in_date := TO_CHAR(SYSDATE-1,'yyyy-MM-dd');
  y_date := TO_CHAR(SYSDATE-1,'yyyyMMdd');
  t_date := TO_CHAR(SYSDATE,'yyyyMMdd');
  stat_time := in_date || ' 00:00:00';
  end_time := in_date || ' 23:59:59';
  file_name := 'WAP_USER_LOGIN_LOG.' || y_date || '.' || t_date || '.001.txt';
  table_name := 'T_MO_ACCESS_LOG_' || TO_CHAR(SYSDATE,'yyyyMM');
  testjiao_handle := UTL_FILE.FOPEN('DIR_DUMP',file_name,'w');

  dyna_sql := 'select ACC_PHONE,ACC_AREACODE,ACC_APPVERSION,to_char(ACC_CREATETIME,''YYYYMMDDHH24MISS'') as ACC_CREATETIME from ' || table_name || ' where ACC_METHOD = ''user.login'' and ACC_CREATETIME between to_date('''|| stat_time ||''',''YYYY-MM-DD HH24:MI:SS'') and to_date('''|| end_time ||''',''YYYY-MM-DD HH24:MI:SS'') order by  ACC_AREACODE,ACC_CREATETIME';

  open my_cur for dyna_sql;
   fetch my_cur into ACC_PHONE,ACC_AREACODE,ACC_APPVERSION,ACC_CREATETIME;
   while my_cur%found LOOP
      UTL_FILE.PUT_LINE(testjiao_handle,ACC_PHONE ||','|| ACC_AREACODE ||','|| ACC_APPVERSION ||','|| ACC_CREATETIME);
   fetch my_cur into ACC_PHONE,ACC_AREACODE,ACC_APPVERSION,ACC_CREATETIME;
   END LOOP;
   UTL_FILE.FCLOSE(testjiao_handle);

EXCEPTION WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM,1,2000));
END DAY_LOGIN;

相關推薦

對於儲存過程中表變數遊標使用

CREATE OR REPLACE PROCEDURE DAY_LOGIN IS TYPE cur_type IS REF CURSOR; in_date VARCHAR2(40);  --時間 y_date VARCHAR2(40); t_date varchar2(40

mysql儲存過程簡單例項 變數賦值 遊標遍歷

應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int, name varchar(20)數值:              1             A              2             B  成績表score 欄

oracle儲存過程簡單例項 變數賦值 遊標遍歷

應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int name varchar(20) 數值:1A             2B 成績表score 欄位:id int     studentid int    subjectid int

資料庫儲存過程,觸發器,遊標,函式

MySQL5 中添加了儲存過程的支援。  大多數SQL語句都是針對一個或多個表的單條語句。並非所有的操作都這麼簡單。經常會有一個完整的操作需要多條才能完成。  儲存過程簡單來說,就是為以後的使用而儲存的一條或多條MySQL語句的集合。可將其視為批檔案。雖然他們的

SQL儲存過程分頁與遊標使用

儲存過程: CREATE procedure p_splitpage    @sql nvarchar(4000), --要執行的sql語句  @page int=1,    --要顯示的頁碼 @pageSize int,&n

初學mysql(十)-資料庫之儲存過程、函式與遊標-自定義函式和流程控制(下)

上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使

資料讀取器具有多個欄位。多個欄位對於儲存過程中的EDM原語或列舉型別無效

報錯程式碼: SqlParameter voteFrom = new SqlParameter("@voteFrom", workFlow.VoteFrom); SqlParameter voteTo = new SqlParameter("@voteTo",

儲存過程中如何利用遊標分批提交

1. 建一個type,同時建一個遊標  type temp_type is record(     temp_rowid varchar2(128),     temp_count integer);   type imw_type is table of temp_ty

mysql 儲存過程中使用多遊標

mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_test`

SqlServer儲存過程、函式、遊標例子之函式(一)

--3.多宣告表值函式:可以看作標量型和內嵌表值型函式的結合體。它的返回值是一個表,但它和標量型函式一樣有一個用BEGIN-END 語句括起來的函式體,返回值的表中----的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯表值型函式的不足。

mysql儲存過程procedure 觸發器trigger 遊標cusor 控制語句(條件,迴圈)

什麼是mysql儲存例程? 儲存例程是儲存在資料庫伺服器中的一組sql語句,通過在查詢中呼叫一個指定的名稱來執行這些sql語句命令. 為什麼要使用mysql儲存過程? 我們都知道應用程式分為兩種,一種是基於web,一種是基於桌面,他們都和資料庫進行互動來完成資料

mysql儲存過程使用表做引數

use mail; delimiter $; drop procedure if exists mlook; create procedure mlook(in tbl varchar(10)) beg

SQL儲存過程、觸發器和遊標

儲存過程 1、儲存過程是事先編好的、儲存在資料庫中的程式,這些程式用來完成對資料庫的指定操作。 2、系統儲存過程: SQL Server本身提供了一些儲存過程,用於管理有關資料庫和使用者的資訊。 使用者儲存過程: 使用者也可以編寫自己的儲存過程,並把它存放在資料庫中,供客戶端呼叫。 3、這樣安排的主要目的就

SSM-Mybatis呼叫Oracle儲存過程返回結果集(遊標)示例

1.建立一個包 此處建立一個包,是為了建立儲存過程時,用遊標作為out輸出引數時宣告為遊標型別用的. --建立一個包 create or replace package types as type empListCursor is ref cursor

Mybits呼叫儲存過程和函式返回遊標,parameterType值必須為java.util.Map,由於它會把返回的遊標放在裡面

    <resultMap id="cursorMap" type="com.vcare.model.Photo">         <result column="AD_PIC_ID" property="photoId" jdbcType="INTEGER"/>        

Mysql儲存過程中使用多遊標

mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_

oracle資料庫儲存過程範例(使用遊標進行迴圈)

使用遊標進行迴圈。最後執行使用exec Counting;即可 create or replace PROCEDURE Counting AS a_count number; cursor authorListCursor is select ID from SCOPUS

在ORACLE中儲存過程變數和表字段相同

1.事件概述 今天再寫儲存過程使用變數沒注意到問題,導致SQL執行緩慢,找了許久才發現哪裡有問題。 2.發現問題 在儲存過程中執行下圖sql需要20秒左右,執行計劃發現走了全表掃描,而在儲存過程中相同的SQL不會有問題。 然後我單獨把SQL拿出來跑,將變數名替換成真實資料,1秒

mysql儲存過程中使用select count(*) into 變數 from +表+ where條件的用法

select count(*) into v_count from dual where userid=2;此語句的意思就是根據where條件查詢dual表,得到的行數存入變數v_count中(給變數賦值) 只能在儲存過程中編寫這樣的語句?如果在mysql的sql語句中編寫

解決 mysql 儲存過程查詢資料方式是變數拼接表的寫法

需求: 用儲存過程查詢動態表名的資料 遇到問題: 查詢語句 from後面不能直接用引數查詢 MYSQL不支援直接使用變數做表名,會把引數名當做表名查詢,報錯 解決方法: 把查詢語句和變數通過concat連線付給變數。通過執行變數來執行此語句 sql程式碼: