CREATE PROCEDURE で 『PLS-00103: 記号"DECLARE"が見つかりました。』

Oracle 10g で次のようなストアドプロシージャを作成しコンパイルしたら

CREATE OR REPLACE PROCEDURE SAMPLE(
  I_PARAM IN NUMBER,
  O_PARAM OUT NUMBER
) AS
DECLARE
 V_PARAM NUMBER;
(以下略)



『PLS-00103: 記号"DECLARE"が見つかりました。』

原因は、CREATE PROCEDURE で DECLARE は使用できないこと…OTL。

単純に DECLARE を削除して


CREATE OR REPLACE PROCEDURE SAMPLE(
  I_PARAM IN NUMBER,
  O_PARAM OUT NUMBER
) AS
  V_PARAM NUMBER;
(以下略)



で良かったのであった。

posted by へっぽ at 23:54 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle]PLS-00403

Oracleで、ある変数 PARAM に SELECT 〜 INTO するプロシージャを書いていてコンパイルすると、

====================================================
    PLS-00403 式'PARAM'は、SELECT/FETCH文のINTO部には記述できません。
====================================================

のエラーが発生。

何のことやらと思ってしばし固まりましたが、

PROCEDURE SAMPLE(
    PARAM IN NVARCHAR2
) AS ...

INTO 先の変数が IN になっていました。

これを OUT にして

PROCEDURE SAMPLE(
    PARAM OUT NVARCHAR2
) AS ...

にしたら当然解決。
凡ミス…。


posted by へっぽ at 00:15 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle 10g] SQLの実行結果をファイルに出力する



SQLの実行結果を、指定した外部ファイルに出力する方法です。

SPOOL コマンドを使用します。


手順:

SPOOL [ファイル名]

 例:SPOOL [C:\sample.txt]

 ※拡張子を指定しなかった場合はデフォルトで「.lst」となります。

SELECT COLUMN1, COLUMN2, … FROM TABLE

SPOOL OFF

 ※SPOOL OFF のタイミングでファイルに書き込まれます。


また、デフォルトでは

1.列が半角スペース区切りになっている

2.結果の各行の右端に LINESIZE に応じたスペースが入っている

ので、個人的に見にくく感じました。


この場合、列をカンマ区切りで表示するには

SET COLSEP ','

を先に実行します。


また、右端のスペースを削除するには

SET TRIMSPOOL ON

を先に実行します。


まとめると、私の場合は次のようなコマンドになりました。


SET COLSEP ','

SET TRIMSPOOL ON

SPOOL C:\sample.csv

SELECT COLUMN1, COLUMN2, … FROM TABLE

SPOOL OFF



posted by へっぽ at 23:44 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle 10g] ORA-01461



javaプログラムで、Oracleへ全角文字をINSERT/UPDATEしようとすると、「ORA-01461: LONG値はLONG列にのみバインドできます。」が出ました。

そもそもこんな所にLONG値なんて使ってないぞ!?

というわけで非常に不可解なのですが、JDBCドライバのバージョンを上げるとエラーが出なくなりました。

(今回の例では、DBのバージョンが10.2.0.1.0だったのに対し、JDBCドライバのバージョンが10.1.0.4でした。

JDBCドライバのバージョンを10.2.0.1.0に変えてやったのです。)


う〜ん、ときどき直観的にはわかりにくいメッセージを出すな、Oracleは。


posted by へっぽ at 00:09 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle 10g] 表領域一覧の取得



使っているデータベースで表領域が一杯となり、エラーが発生。

表領域の拡張をしたいと思ったのですが、随分前に作ったスキーマなので、表領域名が分からなくなってしまいました。

そんなときに使ったのが表領域一覧の参照コマンド。

select * from dba_tablespaces


表領域名は分かりましたが、今度はデータベースファイルがどこかわからない…

そんなときに使ったのがデータベースファイル一覧の参照コマンド。

select * from dba_data_files


無事拡張できました。


posted by へっぽ at 23:01 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle 10g] 表領域、一時表領域の拡張



Oracle 10g表領域を拡張する方法です。

既にある表領域にファイルを追加する方法と、データファイルのサイズを拡張する方法があります。

・表領域にファイルを追加することで拡張する方法

ALTER TABLESPACE "[表領域名]" ADD DATAFILE '[ファイルのフルパス]' SIZE [サイズ];

例:ALTER TABLESPACE "TABLESPACE_SAMPLE" ADD DATAFILE 'C:\oracle\product\10.2.0\db_1\SAMPLE\DAT01.DBF' SIZE 500M;

・既存のデータファイルのサイズを拡張する方法

ALTER DATABASE DATAFILE '[ファイルのフルパス]' RESIZE [サイズ];


また、一時表領域の拡張は次のようにします。

・既存のデータファイルのサイズを拡張する方法

ALTER DATABASE TEMPFILE '[ファイルのフルパス]' RESIZE [サイズ];


posted by へっぽ at 00:33 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

[Oracle10g] Date型変換



DATE型カラムのデータは、ただSELECTしただけではYY-MM-DDで表示されます。

時刻が含まれていたとしてもこの形式なので、フォーマットを整えるためにTO_CHAR関数を使用します。

例えば、データを 2008/10/29 23:32:21 のように出力したい場合は、次のように記述します。

SELECT TO_CHAR([カラム名], 'YYYY/MM/DD HH24:MI:SS') FROM 〜


posted by へっぽ at 23:50 | TrackBack(0) | DB - Oracle | このブログの読者になる | 更新情報をチェックする

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。