我在stackoverflow上发布了相同的内容(请告诉我是否必须删除一个)。
我正在处理 DB2 数据库,据我所知,不支持正则表达式(没有其他库)。
因此,我无法实现类似于本文“将正则表达式匹配的强大功能引入 SQL ”中所解释的内容
你知道我是否可以用 SQL 语句“模拟”这样的正则表达式吗?
^a[aofdmep]{1}[az]{1}[a-z0-9]{4}[sidbfkfpo]{1}
编辑
在上述假设中,我发现WHERE Like 谓词对我来说是可以接受的:
WHERE USER_NAME 不喜欢“a___”
但这是不安全的,并且不涵盖我没有可以匹配的固定字符的其他情况。
为糟糕的标题道歉,我不确定什么是好的标题。
这是当前(简化视图)我正在使用的数据
Agent | Commission
---------|------------
Smith | 100
Neo | 200
Morpheus | 300
Run Code Online (Sandbox Code Playgroud)
我需要计算总佣金的百分比,每个代理负责。
因此,对于特工 Smith,百分比将计算为 (Agent Smith's commission / Sum(commission)*100
所以,我的预期数据是
Agent | Commission | % Commission
---------|---------------|---------------
Smith | 100 | 17
Neo | 200 | 33
Morpheus | 300 | 50
Run Code Online (Sandbox Code Playgroud)
我有一个函数返回每个代理的佣金。我有另一个函数将百分比返回为(Commission/Sum(Commission))*100. 问题是Sum(commission)对每一行都进行计算,并且鉴于此查询将在数据仓库上运行,数据集会相当大(目前,只有不到 2000 条记录),老实说,这是一种糟糕的方法(IMO )。
有没有一种方法可以Sum(Commission)不为获取的每一行计算?
我在考虑两部分查询的内容,第一部分将获取sum(commission)到包变量/类型,第二部分将引用此预先计算的值,但我不确定如何完成此操作。
我只能使用 SQL,而且我在 Oracle 10g R2 上运行。
我有一个用户收到一个 ORA-28002,表明密码将在六天内过期。我运行了以下内容:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试以用户身份登录时,该消息仍然存在。执行这个:
select * from dba_profiles where RESOURCE_NAME LIKE 'PASSWORD_LIFE_TIME';
Run Code Online (Sandbox Code Playgroud)
显示这些值确实更改为 UNLIMITED。
我有一个与 Oracle 合作的案例,他们说他们无法重现这一点。在 11.2.0.1 或更低版本中运行以下命令会从这两个查询中生成两行,但在 11.2.0.2 中,除非删除 case 语句,否则第二个查询将返回三行。任何人都可以确认这种行为吗?
create table t1 as (select rownum+1 id1 from dual connect by rownum<=3);
create table t2 as (select rownum+1 id2 from dual connect by rownum<=2);
--Correct version that returns two rows.
SELECT t1.id1 id1, t2.id2 id2, t3.id3 id3
, DECODE(1,1,'a','b') "Case/Decode"
FROM t1
LEFT JOIN t2 ON t1.id1 = t2.id2
LEFT JOIN (SELECT 1 id3 FROM dual) t3 ON t3.id3 = t1.id1
WHERE (t2.id2 IS NOT NULL or t3.id3 IS NOT NULL); …Run Code Online (Sandbox Code Playgroud) 我正在研究使用动态查询根据用户输入执行选择语句的应用程序,在与 DBA 讨论安全性之后,他们希望我将动态选择语句转换为存储过程。
我已经使用 MSSQL 构建了动态 sql,但我不知道如何将其转换为 Oracle SQL。
CREATE PROCEDURE GetCustomer
@FirstN nvarchar(20) = NULL,
@LastN nvarchar(20) = NULL,
@CUserName nvarchar(10) = NULL,
@CID nvarchar(15) = NULL as
DECLARE @sql nvarchar(4000),
SELECT @sql = 'C_FirstName, C_LastName, C_UserName, C_UserID ' +
'FROM CUSTOMER ' +
'WHERE 1=1 ' +
IF @FirstN IS NOT NULL
SELECT @sql = @sql + ' AND C_FirstName like @FirstN '
IF @LastN IS NOT NULL
SELECT @sql = @sql + ' AND C_LastName like @LastN …Run Code Online (Sandbox Code Playgroud) 有没有办法审核 MySQL 的登录?我希望能够为每个员工创建一个用户名,从而创建登录的审计跟踪。然而,谷歌搜索没有出现好的结果。
我们可以审计的越多越好。至少,知道谁何时登录会很好。最好看看谁在什么时候执行了什么查询。日志主要是为了告诉客户我们有它们,因为数据库中有潜在的敏感信息。
显然,能够审计每个用户(以及何时)执行的查询也将使我们能够更好地查明安全问题的原因,如果出现安全问题。
我公司有一个工具可以监控服务器、服务、数据库等的状态。我们为我们的客户监控一些现场服务器。执行的一项特别简单的检查是通过查询某些数据库属性的值来确定 SQL Server 数据库是否处于“良好”状态。我们监控的四个数据库属性是:
这是我们使用的查询:
SELECT name AS [SuspectDB],
DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) AS [Shutdown],
DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
OR (ISNULL(DATABASEPROPERTY(name, N'IsShutdown'), 1) = 1)
OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)
Run Code Online (Sandbox Code Playgroud)
在测试升级到 SQL Server 2008 时,我们的许多数据库似乎都为IsShutdown属性返回了 1(真)值。SQL Server 2005 以前从未出现过这种情况。该属性的MSDN 文档只是说明“数据库在启动时遇到问题”。
据我所知,数据库非常好。它们已启动,可以查询等。没问题。
是否IsShutdown财产真正的问题对我的监视目的,即,它表明该数据库是在一个糟糕的状态?或者我应该从我的查询中删除它?
注意:在与我们的一位常驻 DBA 交谈时,他们发现在我们的一些新 SQL Server 2008 数据库上,启用IsAutoClose属性的事实可能与这些数据库的 …
MS SQL Server 在执行查询时如何决定何时可以使用“并行性”?我最近在这里发布了另一个问题,当我在查询中有 order by 时查看实际执行计划时使用了并行性,而当我没有 order by 时则没有。所以,我想知道它如何确定何时可以使用“并行性”,何时不能使用。
最近,我不再只是在文件利用率接近 80% 时增加文件,而是更主动地通过常用技巧回收空间,例如对堆进行碎片整理、添加和删除聚集索引、实现行或页面压缩等。
但是,在某些情况下,我可以通过执行DBCC CLEANTABLE回收更多空间。我的环境中有数百个数据库,不可能知道用户在每个数据库中做了什么,并且完全可以接受涉及删除固定长度列的更改。我通常通过查看我编写的一些对象空间利用脚本中的行数与页数来发现这些机会。我想通过尝试自动检测这些场景来更进一步。
我想知道的是,是否有人在积极监控此类机会,如果是,您具体在寻找什么?
我的想法是写一些东西,收集一行的最大和最小大小、表中的行数、分配的页数和使用的页数,然后做一些基本的数学运算来记录结果远远超出了“预期”。
我没有找到用户,show grants for 'username'@'localhost''因为我认为用户名可能略有不同,所以我想对所有数据库用户进行通配符搜索。我怎样才能做到这一点?
更新:为了澄清,我想也许我还没有 100% 清楚。通过通配符,我的意思是我希望能够仅搜索用户名的一部分,或者名称与模式匹配的所有用户。在我需要这个的系统上,有 5k+ 用户,虽然这不是巨大的性能损失,但我也不想一次查看它们。
oracle ×3
mysql ×2
sql-server ×2
aggregate ×1
audit ×1
db2 ×1
parallelism ×1
security ×1
where ×1
windows ×1