• 締切済み

PL/SQLを使用した、プログラミング方法について

osamuyの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

>加算の場合、値は「1」減算の場合、値は「2」です。 これを1と-1に変えれば、集計SQL一発でできるかと。

ghostsweep
質問者

お礼

ありがとうございました。

ghostsweep
質問者

補足

返信ありがとうございます! ソース解読させてください。。。 すみません、質問が増えてしまいました。 もし、 加算の場合、「1」のみではなく。処理カラムの値が「1、3、5」のどれか。 減算の場合、「2」のみではなく。処理カラムの値が「2、4、6」のどれか。 となった場合は、実装可能なのでしょうか? 最後の質問なので、どうかよろしくお願いします。

関連するQ&A

  • PL/SQL データ型チェックについて

    PL/SQLでSPを作成しています。 その中で 「数値だったらA処理をして、数値ではなかったらB処理をする」 という箇所があるのですが、データ型のチェックをするような関数は見つからず、どうしようか悩んでいます。 今、とりあえず「to_number」で変換をしてみて、エラーにならなければA処理、エラーになればB処理とする、という方法は思いついたのですが、例外エラーって遅くなりそうな気がしてあまり使いたくないなと思います。 何かいい方法はないでしょうか?

  • PL/SQLでの処理について

    キーの異なる2つのトランザクションテーブルA,Bに マスタCの値を引っ張ってきて各A,B埋める処理を、テーブル名を引数にPL/SQLのプロシージャにしたいのですが、良い方法はありますか? 以下のイメージです。 <TABLE A> KEY_A C_CD C_VALUE -----+----+------- 1 3 2 3 3 1 <TABLE B> KEY_B C_CD C_VALUE -----+----+------- 1 3 2 3 3 1 <TABLE C> C_CD C_VALUE ----+-------- 1 A 2 B 3 C SQL>EXECUTE foo('A'); <TABLE A> KEY_A C_CD C_VALUE -----+----+------- 1 3 C 2 3 C 3 1 A SQL>EXECUTE foo('B'); <TABLE B> KEY_B C_CD C_VALUE -----+----+------- 1 3 C 2 3 C 3 1 A <処理イメージ> CREATE OR REPLACE PROCEDURE FOO(TNAME VARCHA2) IS c_cd NUMBER; C1 INTEGER; SQL1 VARCHAR2(2000); I INTEGER; BEGIN SQL1 := 'SELECT c_cd FROM ' || tname; C1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(C1, SQL1, DBMS_SQL.V7); DBMS_SQL.DEFINE_COLUMN(C1, 1, c_cd); LOOP IF DBMS_SQL.FETCH_ROWS(C1) > 0 THEN DBMS_SQL.COLUMN_VALUE(C1, 1, c_cd); UPDATE tname set value = c_cd; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ↑ここの部分をうまくかけないでしょうか? ELSE EXIT; END IF; END LOOP; end /

  • PL/SQLでのSQLエラーログの出力について

    PL/SQLでのSQLエラー発生時のログ出力について教えていただきたいことがあります。 既存のシステムで、メインからAの処理を呼び出し、さらにAからBの処理を呼び出している処理で、 エクセプション処理がメインにしか記述されていないものがありました。 この場合、処理Aや、処理BでSQLでエラーが発生した時は、 メインでエラーログが出力されると思いますが、 何か特定特別なケースの場合、きちんと異常が認識できない等の問題はないでしょうか? お手数をおかけしますが、よろしくお願いします。

  • PL/SQLに関しての質問です。

    はじめまして。 PL/SQLの入門書を一冊程度読んで開発に携わってしまった初心者です。 どうしてもわからず、行き詰ってしまったので質問させて下さい。 現在あるパッケージを作成しています。 例えとして、パッケージ内にプロシージャAとプロシージャBが有るとします。 プロシージャA内で、SELECTにてDBから取ってきた値を変数Cに入れます。 その変数Cはパッケージの呼出し元のモジュールに返します。 ここまでは解りますが問題はここからです。 プロシージャAで変数Cに格納した値を、そのままプロシージャBでも使用したいのです。 変数Cを仕様部で宣言して、グローバル変数として使用すれば楽だと思うのですが、 グローバル変数は一切使用してはならない。と言われています。 ご回答お待ちしております。

  • 表どうしで演算するSQLについて

    SQLについて質問です。 コードと値(数値型)で構成されている表が3つある(A、B、C)とします。 そして、下記のようにコードをキーに値の演算をしたいと 思っています。 select A.値 - B.値 + C.値 as z from・・ この時にコードがない時(たとえばAにB,Cと同じコードない時)は、A.値(=0)+B.値(=3)+C.値(=7)のように0をセットして、要は3つのの表の最大レコード数分の演算値を取得したいのですが、どのようにSQLを記述すれば良いでしょうか?

  • PL/SQLについて

    PL/SQLについて お世話になります。 現在Oracle 11gと.Net C#で開発をしている物です。 正直どちらも初心者で悪戦苦闘している日々ですが、 PL/SQLのカーソルについて知りたい事があります。 PL/SQLでカーソルを作成しました。 そしてその同一ストアドプロシージャ文の中で、 先のカーソルの結果で得られた値から別の新たなカーソル でまた新たな結果を返すと言う様な、二重カーソルの様な 事は可能でしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。 出来れば、サンプルや、HP等ご紹介頂ければありがたく 思います。

  • php と SQL 

    PHP・SQLどちらも初心者です。 これから勉強していこうと思っていますが、どこから手をつけていいかわかりません。 私のやりたいことは下記の表を作り、追加ボタンを押すと 追加画面に移りABCDの数値を入れ、登録すると表に一行足される。 修正ボタンを押すとABCDを個別に修正できる。ログも取れたりすとうれしい・・・ 普段の表処理(マクロ処理等も)をWEB上でやりたいのですが、 PHPかSQLだけで出来るんでしょうか?それともPHPとSQL両方必要ですか? 初歩的質問ですみません。 ――――――――――――――――― (1)| A | B | C | D | ――――――――――――――――― (2)| A | B | C | D | ――――――――――――――――― (3)| A | B | C | D | ―――――――――――――――――           ―――――――――――           | 追加 | 修正 |           ―――――――――――           

    • 締切済み
    • PHP
  • T-SQLでDECODEの様な処理

    質問させて頂きます。 T-SQLでPL/SQLのDECODE()の様な処理を行いたいのですが、T-SQLでは同じ様な処理ができる関数はあるのでしょうか? やりたい処理としては、下記のINSERT文でAテーブル.項目Bに設定する値をCテーブル.項目Bの値が"1"ならBテーブル.項目Bを設定し、 それ以外ならCテーブルの.項目Bを設定するという内容です。 ※INSERT文はT-SQLで行いたい処理をPL/SQLで組んだものです。 INSERT Aテーブル ( 項目A, 項目B ) SELECT Bテーブル.項目A, DECODE(Cテーブル.項目B,'1',Bテーブル.項目B,Cテーブル.項目B) FROM Bテーブル, Cテーブル WHERE 割愛 使用しているバージョンはsqlserver2000を使用しています。 DECODE自体は使用できないことは確認済みです。実現可能か不可能や実現可能な場合はサンプルなどで教えて頂きたいです。 皆様のご助力をお願い致します。

  • PL/SQLって?

    今日からPL/SQLの本を読み始めたド素人です。。。 ありえない質問かもしれませんがどなたか助けてください! 今SQL*Plusに参考本の通り以下のコードを記述したところ エラーが発生してしまいました。 通常のSQL文とは違い普通にSQL*Plus上にコーディングするだけでは うまく機能しないのですか? それとも何か設定が必要だったりするのでしょうか? 参考本には特にそのような記述もなくサイトなどから調べても 自分ひとりではどうも解決できません。 ご協力よろしくお願いします! SQL> PROCEDURE PROC_A( 2 a IN NUMBER 3 b IN NUMBER, 4 c OUT NUMBER) 5 /  ↓  エラー内容  ↓ PROCEDURE PROC_A( * 行1でエラーが発生しました。: ORA-00900: SQL文が無効です。

  • PL/SQLについての質問です。

    PL/SQLについての質問です。 カーソルデータ(emp_rec(i))を、TABLE変数(emp_ins(i))に代入して、代入されたTABLE変数を使用して、DML処理を行うことは可能ですか? エラーを解読し対処を行っても、エラーが発生してしまいます。 どうか、ご教授お願いします。 下記を実行すると、下記エラーが発生します。 -実行結果------------------------------------ DECLARE * 行1でエラーが発生しました。: ORA-06502: PL/SQL: 数値または値のエラーが発生しました ORA-06512: 行127 -エラー番号解読----------------------------------------- ●エラー名: PL/ SQL: 数値または値のエラーstring が発生しました ●原因: 算術、数値、文字列、変換または制約エラーが発生しました。たとえば、NULL 値をNOT NULL で宣言した変数に割り当てようとした場合、または100 以上の整数をNUMBER( 2) で宣言した変数に割り当てようとした場合にこのエラーが発生します ●処置:値が制約違反をしないように、データ、操作方法または宣言方法を変更してください。 -ソース------------------------------------ DECLARE --カーソル定義 CURSOR emp_cur IS SELECT a,b,c FROM emp TYPE emptabtype IS TABLE OF emp%ROWTYPE INDEX BY PLS_INTEGER; emp_rec emptabtype; /* 処理対象データ格納変数 */ -- insert作業用 emp_ins emptabtype; ins_count NUMBER := 1; BEGIN /* empカーソルオープン・フェッチ・クローズ */ OPEN emp_cur; FETCH emp_cur BULK COLLECT INTO emp_rec; CLOSE emp_cur; /* (挿入)処理対象のデータを、処理対象データ格納変数に格納する。 */ FOR i IN emp_rec.FIRST..emp_rec.LAST LOOP --挿入するレコードを格納 emp_ins(ins_count) := emp_rec(i); ins_count := ins_count + 1; END LOOP; /* DML処理 */ -- 挿入する FOR count_ins IN emp_ins.FIRST..emp_ins.LAST LOOP INSERT INTO temp VALUES(emp_ins(count_ins).a ,emp_ins(count_ins).b ,emp_ins(count_ins).c); END LOOP; COMMIT; END; /