とっても、初心者です。

本日、初めてのPLSQLプルグラムを書いてみました。

下記のプログラムがそうなのですが、SQL*Plusを起動し、

START XXXXXX (←作成したSQL文の名前)

と書いて実行して見ましたが、エラーは出ないのですが、私の希望では、[test.ddl]ファイルにsakurakoっと出力されていて欲しいのですが、なんにも更新されていません。。。

LOG:プロシージャが作成されました。
LOG:エラーはありません。

何か方法がまずいのでしょうか?
あぁぁ、、何方かよきアドバイスをお願い致します。



=====================================
CREATE OR REPLACE PROCEDURE Create_US_Company IS

CURSOR WORK_LINE IS
SELECT * FROM TEST.US_COMPANY;

TYPE FILE_TYPE IS RECORD (ID BINARY_INTEGER);
FILE_HANDLE UTL_FILE.FILE_TYPE := UTL_FILE.FOPEN('D:\tmp,'test.ddl','w');

STR VARCHAR2(200);
BEGIN

STR := 'SAKURAKO';
UTL_FILE.PUT_LINE ( FILE_HANDLE, STR);

UTL_FILE.FCLOSE (FILE_HANDLE);
END Create_US_Company;
=====================================

このQ&Aに関連する最新のQ&A

A 回答 (4件)

久しぶりだし、コンパイルも通してないので合ってるかどうかわかりませんが。



CREATE OR REPLACE PROCEDURE Create_US_Company IS

-- ファイルハンドル
FILE_HANDLE UTL_FILE.FILE_TYPE;
-- ファイルパス
FILE_PATH VARCHAR2(100) := 'D:\tmp';
-- ファイル名
FILE_NAME VARCHAR2(100) := 'test.ddl';
-- 出力用文字列
STR VARCHAR2(200);

BEGIN

-- ファイルのオープン
FILE_ID := UTL_FILE.FOPEN(FILE_PATH,FILE_NAME,'W');

STR := 'SAKURAKO';

-- ファイルへ出力
UTL_FILE.PUT(FILE_HANDLE,STR);
-- 改行
UTL_FILE.NEW_LINE(FILE_HANDLE);

-- ファイルのクローズ --
UTL_FILE.FCLOSE(FILE_HANDLE);

END Create_US_Company;

コンパイル通らなかったら改修お願いします。。。
実行できない場合は。。。どうしましょう??
    • good
    • 0
この回答へのお礼


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

早速、コンパイルして実行してみました。
1つだけ、エラーが出たので、下記のようにしてみましたが大丈夫でしょうか?

-- ファイルのオープン
FILE_ID := UTL_FILE.FOPEN(FILE_PATH,FILE_NAME,'W');
 ↓↓
FILE_HANDLE := UTL_FILE.FOPEN(FILE_PATH,FILE_NAME,'W');


これで、バッチファイルを作成し、実行してみたのですが、

ログには、
 ○プロシージャが作成されました。
 ○エラーはありません。
とはなるのですが、ファイルへの書き込みはされていません。。。

何が悪いのでしょうか??
実行のさせ方が変ですか????

どうかどうか、宜しくお願い致します。

==バッチ==============================
D:
CD D:\work\
sqlplus -S test/test@test @test.sql > sakurako.log
==バッチ==============================


お礼日時:2001/08/09 11:21

SQL*PLUSで



BEGIN
Create_US_Company;
END;
/

ですね。
ところで、init.oraで、UTIL_FILE_DIRの設定は
してます?
    • good
    • 0

そう言えば・・・


プログラムを実行してます??
ストアドを登録しただけじゃないですか?

Create_US_Company;

(で実行できると思います。)
で、実行してみて下さい。
    • good
    • 0
この回答へのお礼



そうだったんですね。
そうかなって、思っていたのですが、どうしたら実行出来るのやらわからなくって。

で、実行してみました。

でも、駄目でした。

っと、言うのも、このコマンドはどこで実行すればよいのでしょうか??

ひとまず、作成したバッチの最後に追加してみましたが、「SQL文が無効です。」と
エラーメッセージが出てしまいました。

DOSを開いて、実行してみたのですが、パスが悪いのか、どうか?
やはり、同じエラーが出てしまいます。

また、SQLPlusでも実行してみたのですが、結果は同じでした。。。。

くっすん。(T。T;)

大変に、お手数をお掛けいたしますが、どうか、良きアドバイスをどうぞ宜しくお願い致します。 

がんばります。

お礼日時:2001/08/09 13:25

UTL_FILEはサーバにファイルを出力する方法です。


ローカルにファイルを作成したいのであればTEXT_IOを使用します。
環境はどうなっていますでしょうか?
    • good
    • 0
この回答へのお礼



ご指摘をありがとーございます。

現在の環境は、自分のPCにオラクルを入れてますので、どちらでもOKです。
実際には、サーバ君は別になりますが、ひとまず、ファイルが出来るのであれば、
どちらでも大丈夫と思います。

でも、やっぱり、ローカルに出来た方が便利ですよね。

text_ioも、試してみます。
ありがとーございました!!!! (*^0^*)

お礼日時:2001/08/09 13:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QORACLEのUTL_FILEパッケージについて

皆さん、いつもありがとうございます。
OracleのUTL_FILEパッケージを使ったのですが
うまくいきません。
どなたか教えてください。
よろしくお願いします。
目的)
UTL_FILEパッケージを使ってファイルを作成したい
出力先はネットワークにある共有フォルダーです。
質問)
ファイルの書き込み先をネットワークドライブまたは
他の端末(\\コンピュータ名\共有フォルダー)した時
以下のエラーになります。出力先を自端末にした場合は
うまくいきます。ちなみに初期パラには「UTL_FILE_DIR = *」
と記述してOracleの再起動もしております。

エラーメッセージ : User-Defined Exception

以上です。

Aベストアンサー

記憶違いかも知れませんが、ファイル出力は自サーバにしか出せなかったと思います。
9iは出来るのかな?

QDBアプリケーションの設計方針 (参照整合性、外部キーなどの制約はDDLで定義すべき?)

標記の件でご意見を伺いたく投稿します。
データベースにおいて、参照整合性、外部キーなど、レコードの整合性を守るのに不可欠な要素が
いくつかありますが、これらをDDLで定義するのと、フロントエンドのアプリケーションで実装する
のと、どちらが望ましいでしょうか?

世間で普及している教本等では、DDLで定義することになっているようですが、この辺りをきちんと
作り込んだ経験がありません。理由は以下の通りです。

(1) 制約でガチガチに縛ってしまうと、テストデータの作成に難儀する。
→ Access の場合、アプリケーションの画面が影も形もない段階で、テーブルのデータシート
ビューから直接データを投入できるが、制約で縛るとこの手軽さが失われてしまう。
(トリガを書けば、データは投入できるが、何だか余分な作業が増えて損をしたような気がする)

(2) データの整合性は保証できるものの、制約に違反した場合のエラーメッセージがユーザー
フレンドリーではない。

結局、アプリケーションで、エラーを事前に開始するか、またはエラーメッセージをユーザー
向けの文言に書き換える処理が必須となる。

DDLで制約を定義しても、アプリケーション実装の作業負担は軽くならない。


そんな訳で、主キー、規定値以外の制約をDDLで実装した経験は殆どありません。
Accessの場合、ド素人でもデータベースを直接GUIから操作できるので、設計者の意図に反して
データの整合性が損なわれるリスクはありますが、総合的に見て、DDLで制約を定義するメリット
を私はあまり感じません。

一般的にはどうなのでしょうか?
専門家の皆様のご意見をお待ちしております。

初心者ですので、わかりやすくご指導頂けると幸いです。(笑)

標記の件でご意見を伺いたく投稿します。
データベースにおいて、参照整合性、外部キーなど、レコードの整合性を守るのに不可欠な要素が
いくつかありますが、これらをDDLで定義するのと、フロントエンドのアプリケーションで実装する
のと、どちらが望ましいでしょうか?

世間で普及している教本等では、DDLで定義することになっているようですが、この辺りをきちんと
作り込んだ経験がありません。理由は以下の通りです。

(1) 制約でガチガチに縛ってしまうと、テストデータの作成に難儀する。
→ Ac...続きを読む

Aベストアンサー

>そんな訳で、主キー、規定値以外の制約をDDLで実装した経験は殆どありません。

業務の種類によって対応はまちまちですが、
私も主キー、規定値、サイズくらいですかね。

>結局、アプリケーションで、エラーを事前に開始するか、またはエラーメッセージをユーザー
向けの文言に書き換える処理が必須となる。

これも同意です。
アプリのほうでメッセージ出して、なおかつ通常のメッセージボックスはダメという要求が多い。
結局作りこむことになるのが現状

なおかつ、現在個人情報保護法等もあり、
データフィールドを個別に暗号化処理するようにしてしまったので、
基本の制約は意味を成さなくなってしまいました、

暗号化込みのデータベースが出ればまた使うかもしれないですが・・・

なので、最近に限って言えばほとんど使っていません。

QAccess_VBA_記述方法

AccessVBAの記述方法で悩んでいます。
複数のテーブルを順読みして、レコードの更新/追加/削除のプログラムを作成していますが、順読みなので何も入っていないテーブルのレコードも読みに行ってしまいデバックとして出てしまいます。
EOFやNULLをどうにかして判断条件として記述してみましたが、やはり上手くいきませんでした。
レコードでの判断条件では無く、テーブル内にレコードが存在するかどうかという判断文と条件文の記述方法がありましたら、どうか教えて下さい。
宜しくお願い致します。

Aベストアンサー

○案1
Dim cnt
cnt = Dcount("*", "[テーブル名]")
If cnt > 0 Then
' レコードがあるテーブルになにかする
End If

とDcount関数を使えばどうでしょうか。

○案2
また複数のテーブルが同じフィールドを含むならば
ユニオンクエリで1つのテーブルにしてから扱うことも
簡単だと思います。

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

Qオラクル:ビューのCREATE文について

こんにちわ。

OEMやOBJECTBROWSERで標記のものが確認できますが、
これらはどのデータディクショナリを参照しているのでしょうか?

とりあえず、ALL_VIEWSで列名は取得できるのですが、FROM句やWHERE句の部分がどのテーブルから引っ張っているのかが分からない。といったところです。

ご存知の方、どうぞよろしくお願いします。

Aベストアンサー

VIEWの元データを確認したいのであれば、USER_VIEWSの列:TEXTを参照してください。

select text from user_views where view_name=[知りたいView名(大文字ですよ)];


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報