shawn_lk 2023-02-07 17:25 采纳率: 100%
浏览 44
已结题

Oracle命令行执行sql脚本(存储过程)报错,plsql窗口执行正常

问题遇到的现象和发生背景

Oracle使用命令行执行sql脚本,提示有错误字符串,但是在plsql窗口执行是正常运行的。

img

DECLARE V_ROWCOUNT NUMBER;
BEGIN
    SELECT COUNT(1) INTO V_ROWCOUNT FROM USER_TABLES WHERE TABLE_NAME = UPPER('msg_cfg_email');
    IF V_ROWCOUNT = 0 THEN
        EXECUTE IMMEDIATE 
        'CREATE TABLE msg_cfg_email (
            id NUMBER(20,0) NOT NULL,
            tenant_id VARCHAR2(100) DEFAULT NULL NULL,
            tenant_name VARCHAR2(100) DEFAULT NULL NULL,
            app_id VARCHAR2(50) NOT NULL,
            email_config_parameter VARCHAR2(4000) NOT NULL,
            create_time DATE DEFAULT NULL NULL,
            create_user VARCHAR2(255) DEFAULT NULL NULL,
            update_time DATE DEFAULT NULL NULL,
            update_user VARCHAR2(255) DEFAULT NULL NULL,
            del_flag NUMBER(4,0) DEFAULT NULL NULL,
            version_number NUMBER(4,0) NOT NULL,
            PRIMARY KEY (id) 
        )';
        EXECUTE IMMEDIATE 'COMMENT ON TABLE msg_cfg_email IS ''邮件发送的的配置表''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.id IS ''id''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.tenant_id IS ''租户id''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.tenant_name IS ''租户name''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.app_id IS ''终端编码''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.email_config_parameter IS ''邮箱配置参数''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.create_time IS ''创建时间''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.create_user IS ''创建人ID''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.update_time IS ''修改时间''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.update_user IS ''修改人ID''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.del_flag IS ''逻辑删除键:0-未删除;1-删除''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_email.version_number IS ''版本号''';    
    END IF;
END;
/

DECLARE V_ROWCOUNT NUMBER;
BEGIN
    SELECT COUNT(1) INTO V_ROWCOUNT FROM USER_TABLES WHERE TABLE_NAME = UPPER('msg_cfg_sms');
    IF V_ROWCOUNT = 0 THEN
        EXECUTE IMMEDIATE 
        'CREATE TABLE msg_cfg_sms (
            id NUMBER(20,0) NOT NULL,
            tenant_id VARCHAR2(100) NOT NULL,
            tenant_name VARCHAR2(100) NOT NULL,
            app_id VARCHAR2(50) NOT NULL,
            sms_config_parameter VARCHAR2(4000) NOT NULL,
            create_time DATE NOT NULL,
            create_user VARCHAR2(255) NOT NULL,
            update_time DATE NOT NULL,
            update_user VARCHAR2(255) NOT NULL,
            del_flag NUMBER(4,0) NOT NULL,
            version NUMBER(4,0) NOT NULL,
            PRIMARY KEY (id) 
        )';
        EXECUTE IMMEDIATE 'COMMENT ON TABLE msg_cfg_sms IS ''短信发送的配置表''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.id IS ''id''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.tenant_id IS ''租户id''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.tenant_name IS ''租户name''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.app_id IS ''终端编码''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.sms_config_parameter IS ''短信配置参数''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.create_time IS ''创建时间''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.create_user IS ''创建人ID''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.update_time IS ''修改时间''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.update_user IS ''修改人ID''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.del_flag IS ''逻辑删除键:0-未删除;1-删除''';
        EXECUTE IMMEDIATE 'COMMENT ON COLUMN msg_cfg_sms.version IS ''版本号''';
    END IF;
END;
/

操作环境、软件版本等信息

linux Oracle11G

尝试过的解决方法

sql脚本是直接在linux中编辑粘贴的,应该不是字符集或文件编码问题

  • 写回答

2条回答 默认 最新

  • 耶尔_ 2023-02-09 10:01
    关注

    因为sqlplus读取文本默认用的是ANSI编码,读取时乱码导致引号缺失!你需要用文本编辑器(nodepad++之类的)将sql文件转换为ANSI编码,再执行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月7日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效