我正在編寫使用 Python 腳本執行 SQL (Oracle) 語句的代碼,如下所示:PYTHON:with open(os.path.join(WORKING_PATH, "sql", "fetchCalendar.sql"), 'r') as fetch_date = fetch.read() #(Some other code)CD = timestamp_tostring(ACTUALDATE)print("CD:", CD)cnnSB.cursor.execute(fetch_date, CD)獲取日歷.sqlSELECT YEARNBR as yearnbr, QUARTERNBR as quarternbr, MONTHNBR as monthnbr, WEEKNBR as weeknbr FROM MFS_MFSCALENDARWHERE ACTUALDATE = TO_DATE(:CD, 'DD-MON-YY')當我嘗試使用以下值運行它時,會輸出:CD:30-AUG-18回溯(最近一次調用):文件“AHT_Init.py”,第 919 行,在 init_load(data, end_of_week, cur, 3) 文件“AHT_Init.py”,第 644 行,在 init_load populate_rollup(modelid, test_data, train_data, rollup_cmd ) 文件“AHT_Init.py”,第 684 行,在 populate_rollup cnnSB.cursor.execute(fetch_date, CD) cx_Oracle.DatabaseError: ORA-01036: 非法變量名/編號(強調'ORA-01036:非法變量名/編號')當然,我嘗試更改變量名稱無濟于事。我嘗試使用 Oracle SQL Developer 運行 SQL 代碼(在提示時傳入'01-JUN-18',包括單引號),并收到此錯誤:ORA-01858: 在需要數字的地方找到了非數字字符 01858. 00000 - “在需要數字的地方找到了非數字字符” *原因:使用日期格式模型轉換的輸入數據不正確. 輸入數據不包含數字,格式模型需要數字。*操作:修復輸入數據或日期格式模型以確保元素在數量和類型上匹配。然后重試該操作。但是,當我用以下內容替換有問題的行時:WHERE ACTUALDATE = TO_DATE('01-JUN-18', 'DD-MON-YY');代碼按預期工作。任何人都可以引導我了解問題可能是什么,以及如何解決它?非常感謝!編輯:我知道 fetchCalendar.sql 代碼中缺少分號;這對于 Python 在此上下文中如何與 Oracle 交互是必要的。我在 Oracle SQL Developer 上嘗試時添加了一個分號以進行測試,但在為 .sql 文件刪除時它不會導致問題。
添加回答
舉報
0/150
提交
取消