相关疑难解决方法(0)

Java - 转义字符串以防止SQL注入

我试图在java中放入一些反sql注入,并且发现很难使用"replaceAll"字符串函数.最后,我需要将任何现有的转换功能\\\,任何"\",任何'\',任何\n\\n使得当字符串由MySQL的SQL注入评估将被阻止.

我已经搞砸了一些我正在使用的代码,所有\\\\\\\\\\\功能都让我的眼睛变得疯狂.如果有人碰巧有这样的例子我会非常感激.

java regex sql sql-injection escaping

142
推荐指数
9
解决办法
24万
查看次数

表函数和流水线函数之间的区别?

CREATE OR REPLACE TYPE ty_1 AS OBJECT ( fn VARCHAR2(100),
                                        sl NUMBER,
                                        hd DATE );
CREATE OR REPLACE TYPE ty_1_table AS TABLE OF ty_1;

CREATE OR REPLACE FUNCTION FN_RET_COL
  RETURN ty_1_table
AS
  c ty_1_table := TY_1_TABLE();
  BEGIN
    c.extend;
    C(1) := TY_1('A', 1, '10-JUN-2013');
    c.extend;
    C(2) := TY_1('B', 2, '11-JUN-2013');
    c.extend;
    C(3) := TY_1('C', 3, '12-JUN-2013');

    RETURN c;
  END;

CREATE OR REPLACE FUNCTION FN_RET_PIPE RETURN ty_1_table PIPELINED IS
  BEGIN
    PIPE ROW (TY_1('A', 1, '10-JUN-2013'));
    PIPE ROW (TY_1('B', 2, '11-JUN-2013'));
    PIPE ROW …
Run Code Online (Sandbox Code Playgroud)

oracle plsql pipelined-function

6
推荐指数
1
解决办法
3356
查看次数

在 Oracle 中执行动态 Sql 查询

我有一个SELECT查询,其中我将有一个动态WHERE条件。问题是当我尝试将WHERE条件PARAMETER与 SQL 查询连接起来时,它不允许我保存PROCEDURE.

例如:

CREATE PROCEDURE usp_MySearchQuery
(
  QTYPE IN INT,
  OUT_CUR OUT SYS_REFCURSOR
)
IS
DYN_QUERY VARCHAR2;
BEGIN
    IF QTYPE=1 THEN
       DYN_QUERY :=' BETWEEN 1 AND 2';
    ELSE
       DYN_QUERY :='=10';    
    END IF;

    OPEN OUT_CUR FOR
         SELECT * FROM MYTABLE WHERE TYPE=QTYPE AND ID || DYN_QUERY;
END;
Run Code Online (Sandbox Code Playgroud)

这就是我的程序的样子。我试过了,EXECUTE IMMEDIETE但在它的文档中,它写成它不适用于多行查询。

MSSQL我们有EXEC(不确定)可以execute将文本发送到命令的命令。以同样的方式,我们是否有任何可以运行动态查询的命令Oracle


UPDATE: Answer
Run Code Online (Sandbox Code Playgroud)

我是这样试的。

  OPEN OUT_CUR FOR
        ' SELECT * FROM MYTABLE …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql stored-procedures

3
推荐指数
1
解决办法
1万
查看次数

通过 EXECUTE IMMEDIATE 从 select 语句返回值

我搜索了一些如何使用立即执行从 select 语句返回值的示例,但它不断返回错误“ORA-00903:无效的表名”。

这是代码示例:

DECLARE
  LAST_NUMBER NUMBER;

  CURSOR C_SEQUENCES IS
    SELECT
      A.SEQUENCE_NAME, B.TABLE_NAME, C.COLUMN_NAME
    FROM
      USER_SEQUENCES A
    INNER JOIN
      USER_CONSTRAINTS B ON A.SEQUENCE_NAME = REPLACE(B.CONSTRAINT_NAME, 'PK', 'SEQ_ID')
    INNER JOIN
      USER_CONS_COLUMNS C ON B.CONSTRAINT_NAME = C.CONSTRAINT_NAME
    WHERE
      B.CONSTRAINT_TYPE = 'P';

BEGIN
  FOR REG IN C_SEQUENCES LOOP
    EXECUTE IMMEDIATE 'SELECT MAX(:1) FROM :2' INTO LAST_NUMBER USING REG.COLUMN_NAME, REG.TABLE_NAME;
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

是的,该表确实存在。

有任何想法吗?

oracle plsql

1
推荐指数
1
解决办法
5884
查看次数