dbms_random.seed(42)
DBを呼び出そうとしています。 refを参照してください。Python とJayDeBeApi
コネクタを使用する必要があります。これまでのところselect
、問題なくステートメントを実行することしかできませんでした。私は自分が間違っていることを理解できません。
callprocメソッドを提供してJayDeBeApi
いないようで、使用できません。
AttributeError: 'Cursor' object has no attribute 'callproc'
私は素朴に試しました:
conn = jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
['jdbc:oracle:thin:@server:1521/dbname', 'user', 'password'])
curs = conn.cursor()
sql="exec dbms_random.seed(42)"
curs.execute(sql)
しかし、これは次のことにつながります:Error: ORA-00900: invalid SQL statement
構文が正しいと思われる2つのソリューションを試しましたが、ジェネレーターは決定論的ではないため、実際には失敗したと思います。
使用begin/end
:
sql="begin dbms_random.seed(42); end;"
curs.execute(sql)
使用call
:
sql="{ call dbms_random.seed(42) }"
curs.execute(sql)
だから私の質問は: を使用して呼び出すdbms_random.seed(42)
にはどうすればよいですか? 副次的な質問として、ステートメントが実際に実行に失敗したことを確認するにはどうすればよいですか (例外はスローされず、実行の戻り値は未定義です)。Oracle
JayDeBeApi
アップデート:
実際、結果は期待どおりであるため、シードの初期化は期待どおりに機能しています。
sql="SELECT DBMS_RANDOM.value FROM dual"
curs.execute(sql)
data = curs.fetchall()
print(data)
ただし、ランダムなクエリ選択にはまだ奇妙な動作が見られます。
SELECT *
FROM (
SELECT *
FROM table
ORDER BY DBMS_RANDOM.RANDOM)
WHERE rownum < 21;
後者の場合、何らかの理由で、DBMS_RANDOM.RANDOM
実際にはランダムです...