1. 程式人生 > >Oracle儲存過程實現通過動態引數複製表

Oracle儲存過程實現通過動態引數複製表

(作者:陳玓玏)
上一篇記錄的是通過自定義函式複製表的筆記,但是覺得過程還是有些麻煩。覺得還是用儲存過程更簡潔些,今天就把儲存過程的寫法整理出來了。下面程式碼用的時候記得把相應位置變數替換成你自己的。

--使用儲存過程複製表,使用儲存過程來複製表比使用自定義函式更簡單,因為自定義函式返回多行結果需要用遊標,但帶遊標的查詢語句不能用於create as。
create or replace procedure createtable(tname in varchar2,id in number)
is
   --sql_sent是用來儲存sql語句的臨時變數,儲存過程可以不設定返回值,這也是它和自定義函式的重要區別
    sql_sent varchar2(20000);
begin
    sql_sent:='create table '||tname||' as select col from tableName where id='||id;
    execute immediate sql_sent;
    commit;
end;
--執行儲存過程
exec createtable('new_tablename',112);

上面是比較簡單的引數傳入,涉及到時間引數時,處理起來會麻煩一些,時間引數如下:
上面是比較

//複製join之後的表,並將時間作為傳入的引數。這個地方很容易出錯,首先就是單引號的問題,需要再加單引號實現轉義
,所以最好是用dbms_output.put_line(sql_sent);輸出sql語句看一下是否正確
create or replace procedure createtable(tname in varchar2,date_time in varchar2)
is
    sql_sent varchar2(20000);
begin
    sql_sent:='''yyyy-mm-dd''';
    sql_sent:='create table '||tname||' as select * from tableName where trunc(sa_time)>=to_date('||date_time||','||sql_sent||')';
   --這樣拼接的字串作SQL語句常常容易出現拼寫的問題,所以最好是輸出語句檢查一下是否存在問題
    dbms_output.put_line(sql_sent);
    execute immediate sql_sent;
    commit;
end;

--執行儲存過程
exec createtable('newTableName','''2018-09-01''');

相關推薦

Oracle儲存過程實現通過動態引數製表

(作者:陳玓玏) 上一篇記錄的是通過自定義函式複製表的筆記,但是覺得過程還是有些麻煩。覺得還是用儲存過程更簡潔些,今天就把儲存過程的寫法整理出來了。下面程式碼用的時候記得把相應位置變數替換成你自己的。 --使用儲存過程複製表,使用儲存過程來複製表比使用自定義函式

通過oracle儲存過程實現使用者登陸驗證

1.建立使用者表: create table t_user( u_id number constraint pk_tuser primary key, u_name varchar2(15), u_pwd varchar2(20), sex varchar2(2) chec

OCI 呼叫Oracle 儲存過程實現

OCI呼叫儲存過程 最近的風控框架開發中,遇到一個場景,即程式需要呼叫Oracle中的儲存過程,但是目前的框架中並不支援,只支援呼叫組裝好的SQL語句,即基本的資料庫增刪改查操作,這樣就需要開發OCI呼叫儲存過程。 基於這個需求,開始網上找尋資料。由於使用到

Oracle 儲存過程實現批量插入

create or replace procedure BATCH_INSERT_TABLEA_UER(insertNo in integer) is   -----------insertNo:傳入引

ASP.NET呼叫oracle儲存過程實現快速分頁

{ OracleConnection conn =new OracleConnection(ConfigurationSettings.AppSettings["OracleConnstr"].ToString()); OracleCommand cmd  =new OracleCommand(); cmd.

oracle儲存過程中應用動態sql

需求背景:對有些資料庫操作較多的功能演算法需求,或使用應用程式程式碼多次連線操作資料,會造成較大效能損耗,或者系統動態引數化如要查詢的表名是存在資料庫裡的,為節減網路連線開銷,建議使用儲存過程實現資料庫操作需求的演算法。動態sql ,意思是sql語句並不是事先明確的,而是可

Oracle 儲存過程中執行動態SQL,動態表名

create or replace procedure mw_sys.clearrubbishdatefy2 is type table_type is table of mw_app.mwt_ud_yscsjdl.tablename%type; tablenameAr

Oracle儲存過程傳入List引數

--第一步,建立資料庫物件 CREATE OR REPLACE TYPE param_object is object( configId nvarchar2(64), evaluateScore number(18,2), evaluateLevel nvarc

MySQL儲存過程實現動態執行SQL

  create procedure p_procedurecode(in sumdate varchar(10)) begin      declare v_sql varchar(500);    #需要

Oracle 儲存過程 in、out、in out 引數的使用方法

1. in 引數 用於接收引數,在子程式內部,不能進行修改。預設的引數模式:in 案例: -- 宣告儲存過程 create or replace procedure pro_in(p_num in number) is begin dbms_output.put_line(p_n

通過shell指令碼呼叫oracle儲存過程並加入定時任務

例項 檔名:add_tab_partitions.sh #!/bin/sh username='waep' password='czty_waep' sqlplus -S ${username}/

使用c#呼叫oracle儲存過程獲取儲存過程引數資訊

本文介紹如何獲取儲存過程的引數資訊,並介紹如何在c#程式碼中使用ODP.NET呼叫oracle儲存過程返回結果集:1:建立包:SQL> create or replace package FORP_PROC_INFO is  2    3    -- Author  :

動態sql執行oracle儲存過程

     1、呼叫procedure:          v_sql  := 'Begin pkg_name.procedure_name(:in_v1, :in_v2, :out_v1, :out_v2); End;' ;           EXECUTE IMMEDI

oracle儲存過程傳入in引數,返回結果集

create or replace procedure proc_report_TEST(zhxshss in varchar2, pcursor out sys_refcursor) as begi

指令碼實現oracle 儲存過程後臺執行

---問題描述 幾個存過,比對丟失的充值卡,都是幾億的表,在不同的資料庫,儲存過程用DB_LINK實現比對,並且將丟失的資料插入表種,寫了幾個存過,執行了十幾天,用shell指令碼實現存過後臺執行 ---shell指令碼 --money_test1 為儲存過程名字

oracle 儲存過程 引數(in | out | in out)的使用

儲存過程傳參方式 1.in 傳參 create or replace procedure p_name( param_name  in param_type) is --聲明瞭一個呼叫時傳進來的引數 和 它的型別  驗證: create or replace p

Oracle儲存過程使用動態遊標

spool F:/dbtest12.log; set timing on; set serveroutput on; declare --定義遊標:獲取所有表 CURSOR c_allTables IS select t.OWNER,t.TABLE_NAME from

使用 Oracle儲存過程實現資料加密和解密

 我們都知道,幾乎所有的資料庫都有儲存過程,但在實際開發中,它有什麼用途了?下面使用Oracle的儲存過程,採用Oracle自帶的dbms_obfuscation_toolkit.desencrypt

oracle儲存過程,動態sql

CREATE OR REPLACE PROCEDURE "TUBEMNG"."RE" (one OUT INTEGER,two OUT INTEGER,three OUT INTEGER,four OUT INTEGER,ptype IN VARCHAR2,D

通用ORACLE 分頁查詢語句,儲存過程實現

PROCEDURE RECORDS_LIST  (       sqlrecords in varchar2,   sqlrecordscount in varchar2,   cur_result_out out serarch_result,   totalcount o