記事へ Seisuke Nakahashi · 2024年12月4日 @Akio Hashimoto さん 失礼しました、ほんとうですね。記事をよく読むと「venv 環境から IRISインスタンスに接続して SQL実行できます」って書かれていました。逆でした・・・ 残念ながら、現時点 (2024年12月時点) の Embedded Python では、venv のような仮想環境の作成は対応していません。そのため、別に作成された仮想環境にアクセスしたりインポートもできない状態です。 いつか対応してくれるといいな、と私も思っています!
記事へ Seisuke Nakahashi · 2024年11月28日 Akio Hashimoto さん いろいろ大変でしたね。。。 ご質問が「プロジェクト単位で、この拡張機能をON/OFFしたい」という意味でしたら、 ・CacheQuality for Visual Studio Code を、拡張機能から一旦 Disable にして・そのあと、同機能を有効にしたいワークスペースで 「Enable (Workspace) を選択」 でいかがでしょう?
記事へ Seisuke Nakahashi · 2024年11月24日 @Yuji Ohata さん、面白い話題をありがとうございます! ご質問への直接な回答としては「DBeaver が文字列、ObjectScript経由が数値として入る差異は製品仕様で、回避する方法がない」になります。。 背景やその他おもしろ情報を以下お伝えしますね。 ObjectScriptも、実は内部では、データを「文字列」か「数値型」かを明確に区別しています。たとえば、以下の2つはデータとしては厳密には異なります。 set a="12345" ;; a: STRING set x=12345 ;; x: INTEGER if a=x write "OK" とすると、ちゃんと "OK" と表示しますが、内部的には異なるデータです。 ただ、ObjectScript では型を厳密に定義しなくてもデータを扱える、という「メリット」があります。たとえば a は上記のように内部的には文字列扱いですが、aをキャストしなくても、数値を加えることができます。 set a="12345" ;; a: String set b=a+1 ;; b: INTEGER! つまり、上記の a と x はデータとしては厳密には異なりますが、ObjectScriptで取り扱うときは、多言語と違って、文字でもあり数値でもある曖昧さを許容してプログラミングできる、ということです。プログラマーにはラクチンです😄 ここで、Yuji さんがご質問されているテーブル定義の VARCHAR ですが、これは内部データ格納時に、ObjectScript 経由で登録すると 「%Stringだが、もし数値として登録されるなら、数値として登録される仕様」となっています。 Property a1 As %String; ClassMethod init() { &sql(insert into test (a1) values ('123')) &sql(insert into test (a1) values ('12345678901234567890')) } 1件目のデータは、数値 1232件目のデータは、(数値範囲を超える桁数なので) 文字列 12345678901234567890 ただ、ODBC / JDBC 経由でデータ挿入をする場合は、ODBC / JDBC の世界では厳密にデータ型を定義しているため、IRIS登録時に「VARCHAR の 123456789012345678 ね」 と情報が届きます。そのため、同じINSERTでも INSERT INTO test (a1) values (123) は、文字列 123 として登録されます。 ちなみに、「ObjectScriptでそのデータは文字列か数値か」は、$List のデータに格納することで区別がつきます。 set a=123 ;; INTEGER set x="123" ;; STRING set a1=$LB(a) ;; INTEGER in $LIST zzdump a1 ;; a1: 03 04 7B set x1=$LB(x) ;; STRING in $LIST zzdump x1 ;; x1: 05 01 31 32 33 $LIST は第2バイトに型をもっています。上の例ですと a1 : 型 04 = INTEGERx1 : 型 01 = STRING という感じです。 あまりご質問の回答としてふさわしくない話題かもしれませんが、、、 「なるほど、その分野はユルめの言語なのね」と思っていただけると嬉しいです。