小编use*_*495的帖子

是否有一个SQL关键字意思是"不要改变"?

目前,SQL允许您在插入或更新记录时使用关键字DEFAULT,以告诉数据库只使用列的默认数据类型值:

UPDATE TABLE SET COL_A = DEFAULT, COL_B = 'hello' WHERE ID = 123
Run Code Online (Sandbox Code Playgroud)

例如,如果COL_A的数据类型为VARCHAR2,则该语句将在COL_A中插入NULL.

但是,如果我想执行更新,但保持COL_A不变,该怎么办?我知道你可能会说,只需从更新语句中删除COL_A即可.但是,让我们假设COL_A必须在声明中.是否有一个关键字让SQL知道保持COL_A的值不变?

例如,我认为它可能是这样的:

UPDATE TABLE SET COL_A = NOCHANGE, COL_B = 'hello' WHERE ID = 123
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用.

sql database oracle default-value keyword

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

Oracle - 为什么在存储过程中允许EXECUTE IMMEDIATE?

如果存储过程旨在缓解SQL注入攻击,为什么在存储过程中允许EXECUTE IMMEDIATE?以下问题的接受答案是将它们作为抵御此类攻击的一步:

什么是存储过程? /sf/answers/32167201/

"存储过程还具有安全性,因为您可以向存储过程授予执行权限,但用户不需要对基础表具有读/写权限.这是针对SQL注入的良好的第一步."

...除非存储过程使用EXECUTE IMMEDIATE.

此PL/SQL代码返回产品的描述(第二个参数).

CREATE OR REPLACE PROCEDURE prodDescr(vname IN VARCHAR2, vresult OUT VARCHAR2) AS
vsql VARCHAR2(4000);
BEGIN
vsql := 'SELECT description FROM products WHERE name=''' || vname || '''';
EXECUTE IMMEDIATE vsql INTO vresult;
END;
Run Code Online (Sandbox Code Playgroud)

恶意用户输入.

A' AND 1=2 UNION SELECT password FROM members WHERE username='admin
Run Code Online (Sandbox Code Playgroud)

生成的查询.

SELECT description FROM products WHERE name='A' OR 1=2 UNION SELECT password FROM members WHERE username='admin'
Run Code Online (Sandbox Code Playgroud)

执行查询时,攻击者获取管理员密码.

正如您所看到的,虽然我们使用了存储过程,但是攻击者仍然可以像使用PHP中的某些SELECT语句连接而不是清理输入那样轻松地利用漏洞.对我来说,向开发人员说存储过程有助于保护数据库安全,这似乎是非常误导的.

sql security oracle stored-procedures sql-injection

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

CSS - 选择表格中的所有表格单元格 <td> 或 <th>

当所有表格单元格位于 class="p1" 的表格内时,我想为所有表格单元格设置背景颜色:蓝色的样式。以下工作,但很长:

table.p1 > tbody > tr > td,
table.p1 > thead > tr > td,
table.p1 > tbody > tr > th,
table.p1 > thead > tr > th{
    background-color:blue;
}
Run Code Online (Sandbox Code Playgroud)

是否有更短/更优雅的方式来定义此 CSS 规则?

编辑:只有表“p1”直接包含的表单元格可以设置样式,并且没有其他子项(例如这些单元格内的嵌套表)

html css

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

Oracle SQL - 选择最早的3个日期,但忽略NULL

我有这个Oracle SQL语句来获取最早的3个日期:

SELECT LEAST(DATE_1,DATE_2,DATE_3) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

但是,如果其中一个日期为NULL,则无论其他日期是否为NULL,整个LEAST函数都将返回NULL.我想获得三个日期中最早的日期,但忽略任何NULL日期,以便LEAST唯一的时间返回NULL是所有三个日期都为NULL.

我也不能有函数返回不正确的日期,因此这将不会工作:

SELECT LEAST(NVL(DATE_1,SYSDATE),NVL(DATE_2,SYSDATE),NVL(DATE_3,SYSDATE)) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

最干净的方法是什么?

sql oracle datetime

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