• 締切済み

判定処理について

カテゴリーが異なっていたらすみませんm(_ _)m 宜しくお願い致します。 ---------------------------------- EXEC SQL BEGIN DECLARE SECTION;  VARCHAR type[3]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT data_type into :type FROM test_tbl WHERE name='test'; type.arr[type.len]='\0'; if(type.arr == '01'){ /* 処理Aへ */ }else{ /* 処理Bへ */ } --------------------------------------- 上記のようなプログラムがあります。 table_testのnameフィールドが'name'の date_typeフィールドの値を取得します。 取得したdate_typeフィールドの値が'01'なら 処理Aへ、'02'、'03'等なら処理Bを実行したいと 考えています。 ですが、上記の if(type.arr == '01'){ だとエラーが発生しています。 どのようにすればチェックすることができるでしょうか? ちなみに date_typeフィールドはかならずデータがはいっている。 nameはprimary keyの設定のため重複は存在しません。 DBはORACLE、言語はPro*Cです。 どうか宜しくお願い致します。m(_ _)m

  • 653
  • お礼率36% (138/382)

みんなの回答

noname#4564
noname#4564
回答No.1

こちら↓は参考になりませんか?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=514687

関連するQ&A

  • 何をつかえば・・・

    カテゴリーが異なっていたらすみませんm(_ _)m 宜しくお願い致します。 ---------------------------------- EXEC SQL BEGIN DECLARE SECTION;  VARCHAR type[3]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT data_type into :type FROM test_tbl WHERE name='test'; type.arr[type.len]='\0'; if(type.arr == '01'){ /* 処理Aへ */ }else{ /* 処理Bへ */ } --------------------------------------- 上記のようなプログラムがあります。 table_testのnameフィールドが'name'の date_typeフィールドの値を取得します。 取得したdate_typeフィールドの値が'01'なら 処理Aへ、'02'、'03'等なら処理Bを実行したいと 考えています。 ですが、上記の if(type.arr == '01'){ だとエラーが発生しています。 どのようにすればチェックすることができるでしょうか? ちなみに date_typeフィールドはかならずデータがはいっている。 nameはprimary keyの設定のため重複は存在しません。 DBはORACLE、言語はPro*Cです。 どうか宜しくお願い致します。m(_ _)m

  • 関数の戻り値について

    ----test.c----------------- id="0001"; number = get_data(id); /* 関数の戻り値を取得したい */ if(strcmp(number, "01") == 0){ /* Aの処理へ */ }else{ /* Bの処理へ */ } ----test.pc---------------- int get_data(char* id){ EXEC SQL BEGIN DECLARE SECTION; VARCHAR tel_no[3]; VARCHAR id_no[5]; EXEC SQL END DECLARE SECTION; strcpy(id_no.arr,id); id_no.len=strlen(id_no.arr); EXEC SQL SELECT tel_number into :tel_no FROM test_tbl WHERE id=:id_no; tel_no.arr[tel_no.len]='\0'; /*取得したtel_noを返したい!!*/ } --------------------------- test.cで引数に"0001"を指定して、get_data関数を コールして、そのget_data関数で受け取った引数で test_tblを検索しtel_numberフィールドの値を test.cに返し、判断文で処理したいと考えています。 ちなみにtest_tblで引数の条件で合致するデータは 必ず1件のみとします。 どのように記述したらいいかわかりません。 アドバイスお願い致します。m(_ _)m

  • PRO*Cでテーブル名にバインド変数は使えますか?

    PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;

  • CでSQLのテーブルを読む

    SQLのテーブルがあります。 レコードを1行ずつ読むソースを教えてください。 データベースはさっぱり分かりません。 create table mytable (  name text,  age int ); このテーブルからint型のageを列挙したいと思います。 intを読むわけですから EXEC SQL BEGIN DECLARE SECTION; int i; EXEC SQL END DECLARE SECTION; が必要ですよね。あとはさっぱり分かりません。

  • Pro c/c++ でホスト変数の後に.lenとか.arrの意味は?

    お世話になっています。 早速ですが ----------------略--------------- EXEC SQL BEGIN DECLAR SECTION VARCHAR A[2]; EXEC SQL END DECLAR SECTION A.len = sprintf( (char*)A.arr, "%s", B ) ---------------------------------------- 上記のようなソースがあったとき.lenと.arrは何の役割を果たしている のでしょうか?よくわからくて困っています。 わかる方がいらしたら、どうかご教授ください。

  • Cソースにホスト変数を宣言したヘッダをインクルード方法

    C言語ソースにホスト変数を宣言したヘッダをインクルードする記述を教えてください。下記の記述をしたのですが、エラーになります。 EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; #include "../host_header.h" EXEC SQL END DECLARE SECTION;

  • オラクルDB選択レコードの配列代入

    オラクル9.0にて、DB(xxxxxx)から選択したレコード項目(record) を、配列(group)に代入したいのですが、うまくいきません。 よろしくお願いします。 メイン(main) main char group[ ]; nSts = GetGroupIcids(nCountGroup); if (RT_NORMAL != nSts) { return (RT_ERROR); } レコード選択処理(GetGroupIcids) EXEC SQL INCLUDE sqlca; #include <stdio.h> #include <sys/types.h> #include "com/comdef.h" int GetGroupIcids(int nCount) { int nRtn = RT_NORMAL; int nIndex; EXEC SQL BEGIN DECLARE SECTION; char www_corp[14]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE CUR1 CURSOR FOR SELECT record FROM XXXXXXXX; EXEC SQL OPEN CUR1; /*取得したカードIDを配列に代入*/ for (nIndex = 0; nIndex < nCount; nIndex++) { EXEC SQL FETCH CUR1 INTO :www_corp; group[nIndex]=www_corp; } EXEC SQL CLOSE CUR1; return (nRtn); }

  • 連想配列の処理

    こんにちは。 MySQL 4.1.22 と PHP 4.4.7 でプログラムを組んでいて、こちらではいつも皆様の知識と経験を参考にさせていただいております。 今回、どうしても超えられない壁に当たってしまいコーディングが止まってしまったので力をお貸し下さい。 今取り組んでいるプログラムは、複数の<checkbox>から選択した値を受け取って、マスターテーブルに検索を掛けて、返った値を表示した後、確認ボタンで別のユーザーテーブルに値を格納するというものです。 *** プログラムの流れ **** input.php(入力ページ:checkbox )  ↓ view.php (確認ページ:CC_master.tbl)  ↓ regist.php (登録ページ:user_master.tbl) input.php から値を取得して、 CC_master.tbl に検索・値の取得までは出来たのですが、取得した値を別の形に整形するところでつまづいてしまいました。 //--- input.php --- //--- 実際には 99個の checkbox がある訳ではありません。^^; <form name="form" method="POST" action="view.php"> <input type="checkbox" name="cc[]" value="1">50cc <input type="checkbox" name="cc[]" value="2">80cc <input type="checkbox" name="cc[]" value="3">125cc <input type="checkbox" name="cc[]" value="4">200cc <input type="checkbox" name="cc[]" value="5">250cc <input type="checkbox" name="cc[]" value="6">400cc   ・   ・(中略)   ・ <input type="checkbox" name="cc[]" value="99">その他 <input type="submit" name="exec" value="排気量の確認"> </form> //--- END Code --- //--- view.php --- //--- チェックされた排気量コードを CC_master.tbl に対して検索をかける //---例:1番、2番、6番にチェックを入れたとして... //---具体的な排気量を「 50cc 80cc 400cc 」の様に一列、スペース区切りで変数($cc_name)に格納、表示 $arr_cc = $_POST["cc"]; if(isset($arr_cc) and count($arr_cc) > 0){ $val = ""; for($i=0; $i<count($arr_cc); $i++ ){ if($i == 0){ $val .= $arr_cc[$i]; }else{ $val .= "," . $arr_cc[$i]; } } } $res = mysql_query("select * from CC_master where id in ('$val')"); while($row = mysql_fetch_array($res)){ # #ここで配列からフィールド:cc の値のみを取り出して、変数 $cc_name に格納。 # } ecoh $cc_name; //--- END Code --- //--- regist.php --- //--- $cc_name の値をINSERT文で user_master.tbl に登録。 現在、上記のように考えていますが、どうしても変数 $cc_name に意図した形で値を格納できません。 $val に値を入れる要領で処理すればOKだと思うのですが、while( )、for( )、foreach( ) のどれを使っても上手くいきません。連想配列となる $row["cc"] の扱い方(整形方法)がどうしても解らないで助けて下さい。 宜しくお願いします。 //--- CC_master.tbl --- CREATE TABLE `CC_master` ( `id` int(2) NOT NULL default '0', `cc` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=ujis; INSERT INTO `CC_master` (`id`, `cc`) VALUES (1, '50cc'), (2, '80cc'), (3, '125cc'), (4, '200cc'), (5, '250cc'), (6, '400cc'),   ・   ・(中略)   ・ (99, 'その他');

    • 締切済み
    • PHP
  • ORA-00904:無効な識別子の回避策について

    ■やりたいこと フェッチして取得したデータを条件にカウントした結果を取得したい。 ■事象 フェッチして取得したデータにダブルクウォートで囲まれている為、EXECUTE時にORA-00904が発生する。 ■教えて欲しいこと カーソルおよびフェッチ時にダブルクウォートを削除、またはシングルクウォートに変換をすることが可能でしょうか。または、他の方法でカウントを取得する方法がございますでしょうか。 サンプルコードを記載しておりますのでご確認、ご教授のほどよろしくお願いします。 ※※※の箇所が本事象発生箇所となります。 ■サンプルコード DECLARE V_EXEC_STRING VARCHAR2(2000); V_EXEC_COUNT NUMBER; CURSOR TESTCUR IS SELECT TEST_NAME,TEST_ID,TEST_DATE FROM TARGET_TBL WHERE TEST_NAME IN (SELECT tb1.TEST_NAME FROM (SELECT TEST_NAME FROM TARGET_TBL WHERE STATUS = '2') tb1 INNER JOIN READ_TBL tb2 ON(tb1.TEST_NAME = tb2.TEST_NAME)); --取得レコードを格納する変数定義 TESTREC TESTCUR%ROWTYPE; --処理開始 BEGIN --カーソルオープン OPEN TESTCUR; --ループ開始 LOOP --フェッチ 1行ずつデータ取得 FETCH TESTCUR INTO TESTREC; --レコードの最後でループを終了 EXIT WHEN TESTCUR%NOTFOUND; V_EXEC_STRING := ''; V_EXEC_STRING := V_EXEC_STRING || 'SELECT COUNT(*) FROM READ_TBL WHERE TEST_NAME = '|| TESTREC.TEST_NAME; ※※※上記TESTREC.TEST_NAMEに"AAAA"の形でデータが入るため、下記実行時にORAエラーが発生する。 EXECUTE IMMEDIATE V_EXEC_STRING INTO V_EXEC_COUNT; IF V_EXEC_COUNT = '1' THEN UPDATE TARGET_TBL SET TEST_ID = ( SELECT TEST_ID FROM READ_TBL WHERE TEST_NAME = TESTREC.TEST_NAME), TEST_DATE = ( SELECT TEST_DATE FROM READ_TBL WHERE TEST_NAME = TESTREC.TEST_NAME), STATUS = 10 WHERE TEST_NAME = TESTREC.TEST_NAME; END IF; IF V_EXEC_COUNT != '1' THEN UPDATE TARGET_TBL SET STATUS = 20 WHERE TEST_NAME = TESTREC.TEST_NAME; END IF; END LOOP; CLOSE TESTCUR; COMMIT; END; /

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?