返回顶部
首页 > 资讯 > 后端开发 > GO >如何解决 Golang 中的错误“ORA-00911:无效字符”?
  • 924
分享到

如何解决 Golang 中的错误“ORA-00911:无效字符”?

sql语句golang开发 2024-02-08 21:02:18 924人浏览 泡泡鱼
摘要

在golang开发过程中,我们有时会遇到"ORA-00911: 无效字符"这样的错误。这种错误通常是由于在sql语句中使用了无效的字符而引起的。要解决这个问题,我们可以采取一些简单的方

golang开发过程中,我们有时会遇到"ORA-00911: 无效字符"这样的错误。这种错误通常是由于在sql语句中使用了无效的字符而引起的。要解决这个问题,我们可以采取一些简单的方法。首先,在执行SQL语句之前,我们应该仔细检查语句中是否存在特殊字符或无效字符。其次,我们可以尝试使用引号将包含特殊字符的字段或值括起来,以避免出现错误。另外,还可以使用转义字符来处理特殊字符,确保其在SQL语句中被正确地识别和处理。通过这些方法,我们可以有效地解决Golang中出现"ORA-00911: 无效字符"的问题,确保我们的程序能够正常运行。

问题内容

我在调用以下函数时遇到错误“ORA-00911:无效字符”。如果我使用带有硬编码值的 SQL 查询(截至目前,它已在下面的代码片段中注释掉),那么我可以在邮递员中以 JSON 响应获取数据库记录,没有任何问题。所以,看起来我的论点做错了。仅供参考,我正在使用“GitHub.com/sijms/go-ora/v2”包连接到 oracle db。 另外,“DashboardRecordsRequest”结构位于数据模型包中,但我已将其粘贴到下面的代码片段中以供参考。 请注意,当我进行 POC 时,我们将使用存储过程与 Oracle 交互。

邮差请求负载:

{
    "username": "UserABC",
    "startindex": 0,
    "pagesize": 10,
    "sortby": "requestnumber",
    "sortorder": "DESC"
}

执行代码:

type DashboardRecordsRequest struct {
    Username                string `json:"username"`    
    StartIndex              int    `json:"startindex"`
    PageSize                int    `json:"pagesize"`
    SortBy                  string `json:"sortby"`
    SortOrder               string `json:"sortorder"`
}

func GetDashboardActiveRequestRecords(request datamodel.DashboardRecordsRequest) ([]datamodel.ActiveRequestRecord, error) {
    sortby := request.SortBy
    sortorder := request.SortOrder
    startindex := request.StartIndex
    pagesize := request.PageSize
    activerecords := []datamodel.ActiveRequestRecord{}

    slog.Info("Verify values", slog.String("sortby", sortby), slog.String("sortorder", sortorder), slog.Int("startindex", startindex), slog.Int("pagesize", pagesize))

    dbconn, err := getDBConnection()
    if err != nil {
        logger.Error("Could not connect to database")
        return activerecords, err
    }
    stmt, err := dbconn.Prepare("SELECT requestnumber, requeststatus, NVL(requestor, 'N/A'), NVL(pendingwith, 'N/A'), NVL(processtype, 'N/A'), actiondate FROM requests WHERE requeststatus = 'PENDINGAPPROVAL' ORDER BY ? ? OFFSET ? ROWS FETCH NEXT ? ROWS ONLY")
    
    if err != nil {
        logger.Error("Error while building prepared statement for retrieving dashboard active records", slog.String("Error", err.Error()))
        return activerecords, err
    }
    rows, err := stmt.Query(sortby, sortorder, startindex, pagesize)
    //rows, err := stmt.Query()
    if err != nil {
        logger.Error("Error while executing prepared statement for retrieving dashboard active records", slog.String("Error", err.Error()))
        return activerecords, err
    }
    defer rows.Close()

    for rows.Next() {
        var rec datamodel.ActiveRequestRecord
        err = rows.Scan(&rec.RequestNumber, &rec.RequestStatus, &rec.RequestorName, &rec.PendingWith, &rec.ProcessType, &rec.LastActionDate)
        if err != nil {
            logger.Error("Error while processing database resultset for dashboard active records", slog.String("Error", err.Error()))
            return activerecords, err
        }
        activerecords = append(activerecords, rec)
    }
    return activerecords, err
}

请求表结构:

CREATE TABLE "REQUESTS" (
    "REQUESTNUMBER"          VARCHAR2(64 CHAR) NOT NULL ENABLE,
    "REQUESTSTATUS"          VARCHAR2(128 CHAR) NOT NULL ENABLE,
    "SUBMISSIONDATE"         TIMESTAMP(6),
    "PROCESSTYPE"            VARCHAR2(256 CHAR),
    "SUBMITTER"              VARCHAR2(256 CHAR) NOT NULL ENABLE,
    "REQUESTOR"              VARCHAR2(512 CHAR),
    "PENDINGWITH"            VARCHAR2(512 CHAR),
    "ACTIONDATE"             TIMESTAMP(6),
    "RESUBMISSIONDATE"       TIMESTAMP(6),
    PRIMARY KEY ( "REQUESTNUMBER" ),
    FOREIGN KEY ( "SUBMITTER" )
        REFERENCES "SUBMITTERS" ( "USERNAME" )
)

错误:

time=2023-10-04T06:43:06.304Z level=INFO source=C:/code/tutorials/myapp/internal/storage/dashboard.go:19 msg="Verify values" sortby=requestnumber sortorder=DESC startindex=0 pagesize=10
time=2023-10-04T06:43:06.603Z level=ERROR source=C:/code/tutorials/myapp/internal/storage/dashboard.go:34 msg="Error while executing prepared statement for retrieving dashboard active records" Error="ORA-00911: invalid character\n"

解决方法

直接的问题是您正在使用 JDBC 样式的 ? 绑定占位符,而不是预期的 :var 形式。从 go-ora 包的文档中,您说您正在使用:< /p>

所以你的 stmt 应该是:

SELECT requestnumber, requeststatus, NVL(requestor, 'N/A'), NVL(pendingwith, 'N/A'), NVL(processtype, 'N/A'), actiondate
FROM requests WHERE requeststatus = 'PENDINGAPPROVAL'
ORDER BY :sortby :sortorder OFFSET :startindex ROWS FETCH NEXT :pagesize ROWS ONLY

但是除了变量之外你不能绑定任何东西,所以它根本不允许你将 sortorder 作为变量,如果你只是删除它并执行以下操作:

ORDER BY :sortby OFFSET :startindex ROWS FETCH NEXT :pagesize ROWS ONLY

这似乎可以工作,但即使这样也不能完全达到您想要的效果,因为排序将按文字列名称而不是它的值进行排序;因此它将作为 ORDER BY 'requestnumber' 的等效项运行,而不是 ORDER BY requestnumber。并且按该常量字符串排序不会实现任何目标。

您需要在语句中嵌入订购标准:

"... ORDER BY " + sortby + " " + sortorder + " OFFSET :startindex ROWS FETCH NEXT :pagesize ROWS ONLY"

dbfiddle 使用 PL/SQL 动态游标作为简化的等效项,显示三个版本 - 一个错误,一个没有按预期订购,最后订购正常。

但是您还需要清理这些输入以再次防止 SQL 注入。

以上就是如何解决 Golang 中的错误“ORA-00911:无效字符”?的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何解决 Golang 中的错误“ORA-00911:无效字符”?

本文链接: https://lsjlt.com/news/562102.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决 Golang 中的错误“ORA-00911:无效字符”?
    在Golang开发过程中,我们有时会遇到"ORA-00911: 无效字符"这样的错误。这种错误通常是由于在SQL语句中使用了无效的字符而引起的。要解决这个问题,我们可以采取一些简单的方...
    99+
    2024-02-08
    sql语句 golang开发
  • ORA-00911: 无效字符问题案例以及解决方法
    ORA-00911: 无效字符问题案例以及解决方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!1、原本java插入数据库...
    99+
    2024-04-02
  • oracle报无效数字错误怎么解决
    当出现Oracle报无效数字错误时,可能是由于以下几个原因引起的:1. 数字格式不正确:请检查输入的数字是否满足正确的格式要求,例如...
    99+
    2023-08-18
    Oracle
  • python中数字无效如何解决
    在Python中,数字无效通常指的是无法将字符串转换为数字的情况。解决这个问题的方法取决于具体的情况。 验证输入:在将字符串转换为...
    99+
    2024-02-29
    python
  • 如何解决pgbackups错误:备份网址无效
    要解决pgbackups错误:备份网址无效,你可以尝试以下几个步骤:1. 检查备份网址是否正确:确保备份网址正确且能够访问。你可以在...
    99+
    2023-09-27
    pgbackups
  • Oracle中如何解决ORA-01555错误
    这篇文章给大家分享的是有关Oracle中如何解决ORA-01555错误的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 11.6 ORA-01555: 快照太旧 什么是ORA-...
    99+
    2024-04-02
  • 如何解决ora-04031错误
    老熊:http://www.laoxiong.net/an-ora-04031-case.html https://blog.csdn.net/h354541060/article/detai...
    99+
    2024-04-02
  • 如何解决ORA-01157错误
    如何解决ORA-01157错误,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ORA-1157错误解决手册一.错误描述ORA-1157, "cannot...
    99+
    2023-06-06
  • 出现oracle“ORA-00904”错误:标识符无效的原因
    oracle“ORA-00904”错误:标识符无效的原因?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!1、字段名或者表名写...
    99+
    2024-04-02
  • Oracle错误ORA-01145如何解决
    ORA-01145是Oracle数据库的一个错误,表示控制文件中包含不正确的数据块地址。解决这个错误可以采取以下步骤:1. 首先,确...
    99+
    2023-09-05
    Oracle
  • sql无效字符执行sql语句报错的解决方法
    本篇文章为大家展示了sql无效字符执行sql语句报错的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说起来惭愧,总是犯一些小错误,纠结半天,这不应为一个分号...
    99+
    2024-04-02
  • sql报无效数字如何解决
    SQL报无效数字错误通常是由于将非数字值(如字符串、日期等)尝试保存到数字列中引起的。要解决这个问题,可以按照以下步骤进行操作: ...
    99+
    2023-10-26
    sql
  • downplus中的无效使用 Null: ‘replace’错误的解决方法
    错误全部文本如下: Microsoft VBScript 运行时错误 错误 '800a005e' 无效使用 Null: 'replace' /XXX/inc_function.asp,行 764 于是乎.咱们来...
    99+
    2022-06-12
    downplus replace
  • C#中Access数据库连接字符串出现错误如何解决
    这篇文章主要讲解了“C#中Access数据库连接字符串出现错误如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中Access数据库连接字符串出现错误如何解决”吧!C#数据库连接关键...
    99+
    2023-06-17
  • 解组失败,并报告“字符串文字中的无效字符 '\x00'”
    php小编苹果解析报告:当你在处理字符串文字时,如果遇到无效字符'\x00',解组操作会失败。这个问题可能出现在多种情况下,例如从数据库中读取数据时或者接收用户输入时。解决这个问题的方...
    99+
    2024-02-13
  • oracle中字符串长度报错如何解决
    在Oracle中,可以使用LENGTH函数来获取字符串的长度。如果遇到报错,可能是因为参数不正确或者数据库连接有问题。 要解决这个问...
    99+
    2024-04-22
    oracle
  • 使用select语句创建的字段上的标识符错误无效
    如果在使用SELECT语句创建的字段上出现错误的标识符或无效标识符,可能是由于以下几个原因:1. 语法错误:请确保SELECT语句的...
    99+
    2023-09-26
    select
  • 数据库中如何解决ORA-1652错误问题
    小编给大家分享一下数据库中如何解决ORA-1652错误问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!【错误】ORA-16521.ORACLE数据库中涉及到排序操作的一些行为: ...
    99+
    2024-04-02
  • Golang语言如何高效拼接字符串详解
    目录01、介绍02、操作符 +03、strings.Join 方法04、fmt.Sprint 方法05、bytes.Buffer 类型06、strings.Builder 类型07、...
    99+
    2024-04-02
  • @Valid 校验无效,BindingResult未获得错误的解决
    目录@Valid 校验失效问题描述解决过程使用bindingResult做参数校验在控制类中实体类OrderForm@Valid 校验失效 问题描述 使用@Valid校验实体类中的属...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作