ホームページ データベース mysql チュートリアル Shell执行Oracle存储过程,获得存储过程返回值

Shell执行Oracle存储过程,获得存储过程返回值

Jun 07, 2016 pm 05:02 PM

同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存

同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存储过程输出参数返回,并没有写具体的控制程给大家,如果在这个思路上继续进行开发,那就是一个小的etl调度程序,有需要可以联系我,360263676,共同研究共同进步,哈哈

下面将各个脚本进行说明:(ex_produre.sh)

1.执行存储过程脚本

#!/bin/bash
user_name=$1
user_pass=$2
produre_name=$3
statis_sign=$4
sql_str=`
sqlplus -S $user_name/$user_pass as sysdba     set linesize 800;
    set long 2048576;
    set serveroutput on;
    var oi_return number;
    call  $user_name.$produre_name($statis_sign,:oi_return);
    select :oi_return from dual;
exit
EOF`
echo "$sql_str"|sed -e '4,/^$/!d;/^$/d'|
while read run_return
do
echo $run_return
done
2.调执行存储过程的shell脚本(ex_proc.sh)

#!/bin/bash
sh ex_produre.sh etl jiangtao  pdm_cust_act_behav_base 201003 |grep -v OI_RETURN |grep -v -| while read vi_result
do
#this date
echo $vi_result
if [ $vi_result -eq 0 ]
then
echo "this produre is normal run "
else
echo "this produre is not normal run "
fi
done

3.相关存储过程及建表脚本(这个大家可以做为模板使用,,这可是一家大公司的模版,哈哈)

a.存储过程(pdm_cust_act_behav_base )

create or replace procedure pdm_cust_act_behav_base (is_month in varchar2, oi_return out number)
    /** HEAD
     * @name etl.pdm_cust_act_behav_base
     * @caption ??????????
     * @type ???
     * @parameter is_month in varchar2 ???????YYYYMM
     * @parameter oi_return out number ?????????0 ???-1 ??
     * @description ??????????
     * @target etl#tdm_cust_act_behav_base
     * @source hwmk#tmm_ci_user_basic_m
     * @middle
     * @version 1.0
     * @author
     * @create-date
     * @TODO ?
     * @version
     * @mender
     * @modify_date
     * @modify_desc
     * @copyright
     */

-- ********************************************************************************
-- ????:    etl.pdm_cust_act_behav_base
-- ????:    ??????????
-- ????:    is_month   - ????
-- ????:    oi_return - ?????????0 ???-1 ??
-- ????:    hwmk.tmm_ci_user_basic_m
-- ????:    etl.tdm_cust_act_behav_base
-- ????:
-- ????:
-- ????:
-- ????:    v1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:
-- ********************************************************************************

is

    vs_task_name            varchar2(30);       -- ????
    vs_table_name           varchar2(30);       -- ???
    vs_message              varchar2(200);      -- ????
    vi_task_id              integer;            -- ??id
    vi_month                integer;            -- ????
begin
    vs_task_name := 'pdm_cust_act_behav_base';
    vs_table_name := 'tdm_cust_act_behav_base';

    -- ??????
    etl.ps_log(vs_task_name, vs_table_name, is_month, 1, null, vi_task_id);

    -- ??: ??????????
    if (is_month is null) then
        vs_message := '??????????';
        etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
        oi_return := -1;
        return;
    end if;

    ------------------------------------------------------------
    -- ??????
    vi_month := to_number(is_month);

    ------------------------------------------------------------
    insert into etl.tdm_cust_act_behav_base
    (
       statis_month,
       serv_id
    )
    select
      vi_month,
      15204669284
    from dual
    ;
    commit;
    ------------------------------------------------------------
    -- ??????
    etl.ps_log(null, null, null, 2, null, vi_task_id);
    -- ????
    oi_return := 0;
    return;

exception

    when others then
        -- ??????
        vs_message := substr(sqlerrm, 1, 200);
        -- ????
        rollback;
        -- ??????
        etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
        -- ????
        oi_return := -1;
        return;

end;
/
b.存储过程(ps_log)

create or replace procedure ps_log
(
    is_task_name   in     varchar2,
    is_table_name  in     varchar2,
    is_task_sign   in     varchar2,
    ii_task_status in     integer,
    is_task_log    in     varchar2,
    oi_task_id     in out integer
)

-- ********************************************************************************
-- ????:    etl.ps_log
-- ????:    DW????????
-- ????:    is_task_name   - ????
--              is_table_name  - ????
--              is_task_sign   - ????, ???????????
--              ii_task_status - ????, 1 ?????, 2 ??????, 3 ??????
--              is_task_log    - ????, ????[?????]?[??????],
--                                         ????[????]
--              oi_task_id     - ??ID, ???2?3??????
--              ii_rowcount    - ???
-- ????:    oi_task_id     - ??ID, ???1??????
-- ????:
-- ????:    etl.ts_log
-- ????:
-- ????:    ???
-- ????:    2010-02-01
-- ????:    V1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:    ????
-- ********************************************************************************

is

    vs_err_msg      varchar2(255);      -- ??????

begin

    if ii_task_status = 1 then

        -- ????????????
        select etl.seq_dw_log.nextval
          into oi_task_id
          from dual;

        insert into etl.ts_log
        (
            task_id,            -- ??ID
            task_name,          -- ????
            table_name,         -- ????
            task_sign,          -- ????
            start_time,         -- ??????
            end_time,           -- ?????????????
            task_status,        -- ????
            task_log            -- ????
        )
        values
        (
            oi_task_id,
            is_task_name,
            is_table_name,
            is_task_sign,
            sysdate,
            null,
            '1',
            '?????'
        );

    elsif ii_task_status = 2 then

        -- ????????????ID????????
        update etl.ts_log
           set end_time = sysdate,
               task_status = '2',
               task_log = '??????'
         where task_id = oi_task_id;
    else

        -- ??????????ID?????????????
        update etl.ts_log
           set end_time = sysdate,
               task_status = '3',
               task_log = substr(is_task_log, 1, 200)
         where task_id = oi_task_id;
    end if;
    commit;

    -- ????
    return;

exception

    -- ????
    when others then
        -- ??????
        vs_err_msg := substr(sqlerrm, 1, 200);
        -- ????
        rollback;
        -- ??????
        dbms_output.put_line('etl.ps_log: ' || vs_err_msg);
        -- ????
        return;

end;
/

c.建表脚本:

-- Create sequence
create sequence SEQ_DW_LOG
minvalue 1
maxvalue 999999999999999999999999999
start with 2731
increment by 1
cache 20;
create table TS_LOG
(
  TASK_ID     INTEGER,
  TASK_NAME   VARCHAR2(30),
  TABLE_NAME  VARCHAR2(30),
  TASK_SIGN   VARCHAR2(20),
  START_TIME  DATE,
  END_TIME    DATE,
  TASK_STATUS VARCHAR2(1),
  TASK_LOG    VARCHAR2(200),
  ROWCOUNT    NUMBER
);
-- Create table
create table TDM_CUST_ACT_BEHAV_BASE
(
  STATIS_MONTH NUMBER(10),
  SERV_ID      NUMBER(12)
);

linux

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

MySQLの大きなデータセットをどのように処理しますか? MySQLの大きなデータセットをどのように処理しますか? Mar 21, 2025 pm 12:15 PM

記事では、MySQLで大規模なデータセットを処理するための戦略について説明します。これには、パーティション化、シャード、インデックス作成、クエリ最適化などがあります。

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? Mar 19, 2025 pm 03:52 PM

この記事では、ドロップテーブルステートメントを使用してMySQLのドロップテーブルについて説明し、予防策とリスクを強調しています。これは、バックアップなしでアクションが不可逆的であることを強調し、回復方法と潜在的な生産環境の危険を詳述しています。

外国の鍵を使用して関係をどのように表現しますか? 外国の鍵を使用して関係をどのように表現しますか? Mar 19, 2025 pm 03:48 PM

記事では、外部キーを使用してデータベース内の関係を表すことで、ベストプラクティス、データの完全性、および避けるべき一般的な落とし穴に焦点を当てています。

JSON列にインデックスを作成するにはどうすればよいですか? JSON列にインデックスを作成するにはどうすればよいですか? Mar 21, 2025 pm 12:13 PM

この記事では、クエリパフォーマンスを強化するために、PostgreSQL、MySQL、MongoDBなどのさまざまなデータベースでJSON列にインデックスの作成について説明します。特定のJSONパスのインデックス作成の構文と利点を説明し、サポートされているデータベースシステムをリストします。

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? 共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? Mar 18, 2025 pm 12:00 PM

記事では、準備されたステートメント、入力検証、および強力なパスワードポリシーを使用して、SQLインジェクションおよびブルートフォース攻撃に対するMySQLの保護について説明します。(159文字)

See all articles