给出以下 PL/SQL 语句:
BEGIN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE special';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
EXECUTE IMMEDIATE 'CREATE TABLE special(
id int DEFAULT NULL,
col1 varchar(255) DEFAULT NULL,
" Name " varchar(255) DEFAULT NULL,
specchar varchar(50) DEFAULT NULL
)';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (1, ''Customer Name'', ''MOL'', ''normal'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (2, ''Customer Name'', ''INA'', ''[blockq] text'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (3, ''Customer Name'', ''LUKOIL'', ''"quoted" text1'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (4, ''Customer Code'', ''ABC'', ''questionmark ?'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (5, ''Customer Code'', ''CDE'', ''back\slash'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (6, ''Customer Code'', ''FGH'', ''hej haj'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (100, ''Customer Code'', ''F\x00apple'', ''hej haj'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (101, ''Customer Code'', ''F\x7Fapple'', ''hej haj'')';
EXECUTE IMMEDIATE 'INSERT INTO ADMIN.special VALUES (102, ''Customer Code'', ''F\rapp\nle'', ''hej ha'')';
END;
这应该在 OCI 中重新创建并填充一个简单的测试表(我想,其行为与本地 PL/SQL 数据库相同)
下面的代码从文件中读取语句并尝试执行它:
with oracledb.connect(user=auth["username"], password=auth["password"], dsn=dsn) as conn:
with conn.cursor() as cursor:
cursor.execute(file.read())
执行此语句后,当我进入 OCI 数据库控制台(浏览器)时,此表中的 select 语句不会产生任何行。
从 Web 控制台发出此查询将填充该表。
有人可以帮助我吗,我做错了什么?
插入记录后,您需要发出提交。尝试在cursor.execute
后添加
conn.commit()