A5:SQL Mk-2

開発のこと、日々のこと

テーブルエディタでペーストした際、Not NULL制約の項目に空文字を設定したい

ホーム フォーラム A5:SQL Mk-2掲示板 テーブルエディタでペーストした際、Not NULL制約の項目に空文字を設定したい

  • このトピックには7件の返信、2人の参加者があり、最後ににより6年前に更新されました。
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #2987 返信
    ki
    ゲスト

    お世話になります。

    トピックスの件につきましてご教授頂ければと思います。

    【環境】
    A5:SQL Version:2.13.2
    DB:Postgresql

    テーブルエディタへレコードは貼り付けた際、NULL許容のtext型に空文字が入りますが、NOT NULL制約のtext型で同じ事を行うと、「フィールド ‘フィールド名’ の値が必要です」と表示され、空文字を挿入する事が出来ません。

    SQL文のinsert文では”でNOT NULL制約のtext型に空文字を設定する事が可能です。
    尚、テーブルエディタではShift+Del(又は右クリックの「NULLを入力する」)でNULLを設定する事が可能ですが、空文字を設定する内容がありませんでした。

    テーブルエディタでNOT NULL制約のtext型に空文字を入力するためには何か設定が必要でしょうか?

    #2993 返信
    松原正和
    キーマスター

    kiさんこんにちは。

    はい、確かにShift+DELでNULLは入力できたのですが、NULLの状態から空文字を入力する簡単な方法はありませんでした。いったん何か値を入力し、別のカラムに移ってから元のカラムに戻し、入力した文字をDELで削除する必要があります。

    そこで、Version 2.14.0 beta 9でShift+DELをNULLでないときはNULLの入力、NULLのときは空文字の入力のトグル動作に変更してみました。如何でしょうか。

    #2997 返信
    ki
    ゲスト

    松原様

    ご対応ありがとうございます。

    何点か御座います。

    1.Version 2.14.0 beta 9にて、Shift+DelでNULLと空白の切り替えができない様です。
      変更履歴にある、「« NULL »」の対応による影響でしょうか?

    2.私が余計な事を書いたのか論点がずれてしまいました。
      グリッドにデータを貼り付ける際、NOT NULL制約に対して空白を設定する事が出来ないのです。
      NOT NULL制約あり:« NULL »でNULL挿入、\tでNULL挿入
      NOT NULL制約なし:« NULL »でNULL挿入、\tで空白挿入

    NULLを確実に入れる仕様にするためかとは思いますが、NOT NULL制約に対して、オプション等で必ずNULLなのか、NULLと空白を分けて挿入可能にするか出来ましたら幸いです。

    #3025 返信
    松原正和
    キーマスター

    ki さんこんにちは。

    Shift+DELによる空文字の入力はOracleの場合効かない(Oracleは空文字はNULLとして扱うため)のですが、PostgreSQLでしたでしょうか?。

    テーブルエディタへの貼り付けの際、文字列項目かつNOT NULLで空文字列(またはNULL)を張り付けた場合は、空文字として扱うようにしてみました。

    本日(9/2)にリリース予定のVersion 2.14.0 beta 11で修正します。

    #3275 返信
    yt
    ゲスト

    横から失礼致します。
    私の環境(beta9,11,16で確認)でもShift+DelでNULLと空白の
    切り替えができなかったので、ご報告いたします。

    【環境】
    A5:SQL Version:2.14.0 beta 9,11,16
    DB:Postgresql

    【現象が起きたテーブル】

    create table “public”.test_table (
    code text default ” not null
    , name text default ” not null
    , primary key (code)
    );

    あと同じ問題かは分かりませんが、
    別の手段で強引にNotNull項目に空白をセットしたデータを作成し
    そのレコードの別の項目を変更すると、以下のようなエラーメッセージが表示されました。

    —————————
    A5:SQL Mk-2 64bit edition Version 2.14.0 beta 11
    —————————
    Update failed. Found 0 records
    —————————
    OK
    —————————

    #3300 返信
    松原正和
    キーマスター

    ytさんこんにちは。

    Shift+DelによるNULLと”の切り替えですが、たとえば、Oracleでは”はNULLの意味なのでトグルできないように制御していますが…PostgreSQLなのですよね。
     
    なかなか再現できないのですが、具体的にはどのような動きになっているのでしょうか?。(たとえば、NULLにはなるが、何度Shift+Delを押下しても ” にならないとか)

    「別の手段で強引にNotNull項目に空白をセットしたデータを作成しそのレコードの別の項目を変更」の件ですが、A5:SQL Mk-2でテーブル内容を表示した後、別のツールで主キーを変更すると、A5:SQL Mk-2はその変更を認識できないので更新時にレコードを見つけることができず、「Update failed. Found 0 records」になってしまいます。

    #3312 返信
    yt
    ゲスト

    以下のような手順であらためて確認してみました。(2.14.0 beta 17)

    ①PostgreSQL(9.6.1)で以下のようなDBを用意する。

    ②-1 Shift+DELを1回押す
     →NULLが入る
    ②-2 もう一度Shift+DELを押す
     →表示上は何も変わらない
    ②-3 その状態で下キーを押す
     →「フィールド’XXXX’の値が必要です」とエラーになる

    ③-1 A5:SQLを再起動する。
    ③-2 codeが空の行のnameを「cc」に書き換える。
     →「Update failed. Found 0 records」とエラーになる。

    #3330 返信
    松原正和
    キーマスター

    ytさんこんにちは。

    A5:SQL Mk-2でPostgreSQLに接続するとき、使用しているライブラリの制限(仕様?)でtext型に空文字列を設定できず、NULLとして解釈するようです。どうも内部的にCLOBとして扱っていることに何か関係がありそうです。

    とりあえずの解決策としてはオプションダイアログで「PostgreSQL」タブの「TEXT型をラージオブジェクト(CLOB)型ではなく、文字列型として扱う。」をチェックすると、空文字列を設定できますが、8192バイトまでしか扱えなくなるのでデータによっては注意が必要です。

8件の投稿を表示中 - 1 - 8件目 (全8件中)
返信先: テーブルエディタでペーストした際、Not NULL制約の項目に空文字を設定したい
あなたの情報:




コメントは受け付けていません。