- 締切済み
CREATE PROCEDUREで
MySQL5.0を使用しております。 ユーザー定義の宣言はできないのでしょうか? type kokyaku_data IS RECORD ( DECLARE v_kokyaku_nam VARCHAR(60); DECLARE v_kokyaku_kbn VARCHAR(1);); これを、DECLARE kokyaku_data_rec kokyaku_data; で呼び出していますが、 「type kokyaku_data IS RECORD 」の部分でエラーとなっています。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
関連するQ&A
- ストアドプロシージャについて
お世話になります。 SQLServseのストアドプロシージャで、あるテーブルのテストデータを100件ほど作成したいと思っています。 しかし、プロシージャを実行すると「プライマリキーが重複しています」とエラーが出ます。 テーブル内にはすでにCODE='0001'と'0101'の2件が存在します。そのため挿入開始コードは'0002'としたのですが・・・。まだ同じエラーが発生します。 テーブル名:MST_USER CODE char(4) ←キー KBN char(2) NAME varchar(40) PASS varchar(10) 作成したプロシージャ CREATE PROCEDURE dbo.test_update_USER AS declare @count int declare @kbn int set @count = 2 set @kbn = 0 while 1 = 1 begin update MST_USER set CODE = right('0000' + ltrim(str@count)), 4), KBN = right('00' + ltrim(str(@kbn)), 2), NAME = 'test' + ltrim(str(@count)), PASS = 'test' + ltrim(str(@count)) set @count = @count + 1 if (@count > 100) break if (@kbn > 3) set @kbn = 0 else set @kbn = @kbn + 1 end GO 何か間違えているのか自分ではわからなくなっている状態です。 どなたかご指摘いただけると幸いです。
- ベストアンサー
- SQL Server
- コンポジット型の変数?
PL/SQL参考本を読み始めているのですが 「コンポジット型の変数」というとろこで質問があります。 コレクションを使った変数定義というのを見ているのですが その定義内容について教えてください。 参考本では下記のような定義を行っていました。 DECLARE TYPE hosttable_type IS TABLE OF VARCHAR2(15) INDEX BY VARCHAR2(32); ・・・(1) host_table hosttable_type; ・・・(2) 「コレクションとは一般的なプログラミング用語の配列にあたる」 との解説がありましたが 上記の変数定義でどの部分が配列変数の宣言にあたるのですか? (1)が配列変数の宣言部分で (1)の「INDEX BY VARCHAR2(32)」では添字の長さを指定し 「TYPE hosttable_type IS TABLE OF VARCHAR2(15)」では 実際配列に格納する値の長さを指定してる という意味なのでしょうか??? サイトなどを調べてみてはいるのですが 自分ひとりではどうも解決できなくて。。。 どなたかお力をお貸しください!
- 締切済み
- Oracle
- VBAでDBから取得したデータを突き合わせる
VBAでOracleに接続し、取得したレコードを突き合せようとしています。 2つのテーブル(TBL_A、TBL_B)からレコードを1件ずつ取得し、 それぞれのレコードの項目を突き合わせて一致しているかを確認します。 2つのテーブルは以下のような状態です。 【TBL_A】 社員番号,SYAIN_NO,VARCHAR2(10) 社員名 ,SYAIN_NM,VARCHAR2(50) 【TBL_B】 社員番号,SYAIN_NO,VARCHAR2(10) 社員名 ,SYAIN_NM,VARCHAR2(50) レコードを取得する際、 以下のようなユーザ定義型変数に値を設定しています。 Dim TBL_A_REC As SYAIN Dim TBL_B_REC As SYAIN Type SYAIN SYAIN_NO As String SYAIN_NM As String End Type 今後、各テーブルに生年月日のカラム(BIRTH)を追加する可能性があり、生年月日も突き合わせたいです。 先日、こちらで質問してユーザ定義型変数を動的に増やすことは不可能であるとご回答を頂きました。 ユーザ定義型変数を用いずにDBから取得した値を設定し、 突き合わせを行う良い方法はあるのでしょうか?
- 締切済み
- その他([技術者向] コンピューター)
- 【SQLServer ストアドプロシージャ】 変数の定義型について
SQLServer暦が浅くいまいち把握できていないので 詳しい方教えてください。 SQLServerのストアドでは変数の型に、既存のテーブルの型を流用できないのでしょうか? ORAcleでは以下のような定義が出来たので不便に感じています。 【テーブルM_USER】 USER_ID VARCHAR2(8) USER_NANE VARCHAR2(50) ・・・ ・・・ 上記のようなテーブルがある場合、 変数を「VAR_USER_ID M_USER.USER_ID@TYPE」 のような宣言ができ、 VAR_USER_ID変数はテーブルM_USERのUSER_IDと同じ型、ということになります。 SQLSERVERではこのようなことは出来ないのでしょうか?
- ベストアンサー
- SQL Server
- PL/SQL-プロシージャ
プロシージャBはテスト実行のため、プロシージャAを真似て作成しています。 --最後のIF文で、プロシージャAかBのどちらかに走らせたいと思っています。 DECLARE --プロシージャA--------------------------------------- PROCEDURE A IS fno1 utl_file.file_type; dnm1 varchar(200) :='XXX'; fnm1 varchar2(200) :='BBB.txt'; CURSOR cu1 is select XYZ as ABC from CCC; BEGIN fno1 := utl_file.fopen(dnm1,fnm1,'w'); FOR CU1_REC1 in CU1 loop utl_file_put_line(fno1,' '|| CU1_REC1.XYZ END LOOP; utl_file.fclose(fno1); end; --プロシージャB------------------------------------- プロシージャAと似たような処理 --プロシージャAかBかを判定するIF文------------------------------ BEGIN IF CCC.ABC = '0'; THEN A; ELSE B; ENDIF; END; /
- 締切済み
- Oracle
- 「Oracle 9i」について
「Oracle 1.7.3.4」でエクスポートしたデータを、 「Oracle 9i」にインポートした後、 参照すると最後のデータの値がおかしくなってしまいます。 (今のところわかっているのは、8と9が2に変わることです。) レコードの最後がCOMP-3で終わっているのがいけないのでしょうか? よくわからないので、どなたか教えて頂けないでしょうか? (例) *テーブルのレイアウト* CREATE TABLE DB (DB_REC VARCHAR2(21), DB_KEY1 VARCHAR2(9), DB_KEY2 VARCHAR2(1)) TABLESPACE DB_TSPACE STORE (INITIAL 300K NEXT 100K MINEXTENTS 1 MAXEXTENTS 10 PCTINCREASE 0 ); *コピー句* 01 DB-REC. 03 DB-KEY. 05 DB-KEY1 PIC 9(09). 05 DB-KEY2 PIC 9(01). 03 DB-KBN PIC X(01). 03 DB-INYMD PIC 9(08) COMP-3. 03 DB-OUTYMD PIC 9(08) COMP-3. です。よろしくお願いします。
- ベストアンサー
- その他(データベース)
- ストアドプロシージャでのパラメータのデータ型の質問
いつもお世話になっております。たびたびの質問で恐縮です。 ストアドプロシージャでのパラメータのデータ型が設定できず困っております。たとえば次はパラメータの文字を表示させるものです。 CREATE OR REPLACE PROCEDURE test(p VARCHAR2(10)) IS t VARCHAR2(10); BEGIN t:=p; DBMS_OUTPUT.PUT_LINE(t); END; / コンパイルエラーになるので、パラメータのデータ型を、VARCHAR2のように(10)を取るとうまくいきます。しかし、変数定義の「t VARCHAR2(10)」の(10)を取ると文字列の制約制限からはずれるとのエラーになります。 VARCHAR2というのは、PL/SQLの変数あるいはパラメータではどのように記述すればよろしいのでしょうか。 基本的なことを理解しておらず、申し訳ありません。 どうか、よろしくお願いいたします。
- ベストアンサー
- Oracle
- PL/SQLのプロシージャが動かない
テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、declareで実行する時は何の問題も出ないのにプロシージャを作ろうとするとエラーが発生します。 原因が理解できないのですが返答をお願いします。 create or replase procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END; 実行すると ORA-00905: キーワードがありません。 のエラ-が出ます
- ベストアンサー
- Oracle
- [PL/SQL]REFCURSORが戻り値のプロシージャについて
[PL/SQL]REFCURSORが戻り値のプロシージャについて お世話になってます タイトルの内容について、親プロシージャより引数を受け取り 子プロシージャでカーソルをオープンして、そのカーソルを親に戻す。 というプロシージャなのですが、親から実行した場合には問題ないのですが 子をSI ObjectBrowserから実行すると[実行][デバッグ]共に 押した瞬間に止まってしまいます。 下記にソースを記述します --カーソル変数の定義 CREATE OR REPLACE PACKAGE LC7BDEV.PKG_TEST_CURSOR IS TYPE TEST_TYPE IS RECORD (COL1 TABLE1.COL1%TYPE , COL2 TABLE1.COL2%TYPE ); TYPE CUR_TEST IS REF CURSOR RETURN TEST_TYPE; END; --親プロシージャ CREATE OR REPLACE PROCEDURE PD_TEST ( in_COL_KEY IN TABLE1.COL_KEY%TYPE ) IS TEST_REC PKG_TEST_CURSOR.CUR_TEST; TEMP_COL1 TABLE1.COL1%TYPE; TEMP_COL2 TABLE1.COL1%TYPE; BEGIN PD_TEST_KO(in_COL_KEY,TEST_REC); loop fetch TEST_REC into TEMP_COL1,TEMP_COL2; exit when TEST_REC%notfound; dbms_output.put_line(TEMP_COL1 || ',' || TEMP_COL2); end loop; close TEST_REC; END; --子プロシージャ CREATE OR REPLACE PROCEDURE PD_TEST_KO ( in_COL_KEY IN TABLE1.COL_KEY%TYPE , in_TEST_REC OUT PKG_TEST_CURSOR.CUR_TEST , ) IS BEGIN OPEN in_TEST_REC FOR SELECT COL1,COL2 FROM TABLE1 WHERE COL_KEY = in_COL_KEY END;
- ベストアンサー
- その他(プログラミング・開発)
- 変数の取り扱いについて
はじめまして。思いっきりSQLSERVERは初心者なんですが宜しくお願いします。 現在SQLSERVER2005です。 ややこしくなるので要点だけ以下まとめています。 変数を利用してレコードを抽出する時なんですが… ALTER PROCEDURE Test @Rank INT BEGIN DECLARE @SELECT AS VARCHAR(100) DECLARE @WHERE AS VARCHAR(100) DECLARE @SQL AS VARCHAR(200) SET @SELECT = 'SELECT * FROM tblA ' SET @WHERE = 'WHERE Rank > ' + @Rank SET @SQL = @SELECT + @WHERE EXEC(@SQL) END 実行すると varchar の値 'WHERE Rank > 'をデータ型 int に変換できませんでした。 となります。 Rank部分が数値なんですが、どのように取扱いすべきなんでしょうか。
- ベストアンサー
- SQL Server