代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

创建函数后的代码作为字符串意味着什么?

  •  1
  • Tim unnamed eng  · 技术社区  · 7 年前

    a great reply 以下内容:

    在PostgreSQL中, CREATE FUNCTION 确实是“SQL语句”,但只是 “包装器”指定由某个对象执行的代码块 与SQL查询“引擎”不同。Postgres(与其他DBMS不同) 支持可以执行代码块的多个“运行时引擎” 它被传递到“create function”语句-其中一个工件 就是那个 代码实际上是一个字符串 所以只创建函数 看到一个字符串,没有其他内容。

    “代码实际上是一个字符串,所以create函数只看到一个字符串,其他什么都看不到”的结果是什么?

    这是否被视为动态SQL?与动态SQL相比,它是否预防或引入了SQL注入风险?

    这与其他RDBMS(如果有)有何不同?哪里“代码不是字符串”?

    谢谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Laurenz Albe    7 年前

    PostgreSQL对语言一无所知,只知道它必须调用 执行函数。

    这只是一个实现细节,并不会使PostgreSQL函数比其他RDBMS更容易受到SQL注入的攻击。

    • 函数参数:在这里,您应该尽可能选择非字符串数据类型。

    • %L 的模式 format

    同样,如果函数体被指定为字符串或不被指定为字符串,这也是相同的。

        2
  •  1
  •   Bohemian    7 年前

    CREATE FUNCTION 是代码(在核心SQL引擎之外执行),它是一个字符串(即 SQL)。