使用oracledb执行PL/SQL不会生效

问题描述 投票:0回答:1

给出以下 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 控制台发出此查询将填充该表。

有人可以帮助我吗,我做错了什么?

plsql oracle-cloud-infrastructure
1个回答
0
投票

插入记录后,您需要发出提交。尝试在cursor.execute

后添加
conn.commit()

© www.soinside.com 2019 - 2024. All rights reserved.