我想编写一个检查 PostgreSQL 表中使用的排序规则的脚本,但谷歌搜索Postgresql detect collation
对我来说效果不佳,而且文档并没有让搜索变得容易。
谁能告诉我如何检查这个?
我想知道是否有必要在函数/过程中插入/删除/更新后写入提交?
例子:
create or replace function test_fun
return number is
begin
delete from a;
return 0;
end;
Run Code Online (Sandbox Code Playgroud)
或程序
create or replace procedure aud_clear_pro
as
begin
delete from a;
end;
Run Code Online (Sandbox Code Playgroud)
删除后需要提交吗?
无法理解以下情况:
如果我从 SQL 窗口调用函数/过程,那么它需要提交
但
如果我使用 dbms_scheduler 调度函数/过程并运行该作业,则会自动提交 delete 语句。
为什么?
这更像是一个一般性问题,但这个问题的动机是我在使用 SQL Server 时遇到的一个问题。
我将此触发器附加到包含一些逻辑的表上的 Insert 事件,作为副作用,如果没有插入行,则会引发错误。经过进一步调查,我发现尽管没有插入行,但触发器仍在触发。
Microsoft Docs on DML Triggers 中使用的语言似乎与此行为相矛盾:
DML 触发器是一种特殊类型的存储过程,当发生影响触发器中定义的表或视图的 DML 事件时,它会自动生效。
这是跨 DBMS 的默认行为吗?当没有行受到影响时,是否有特殊原因触发触发器?
我正在寻找某个字段中的某个字符串,并想用一个新字符串替换它。具体来说,我希望对一个 URL 的所有引用都更改为另一个 URL。我已经编写了这个 SQL 语句,并mysql>
使用 MySQL Community Server 5.1.54 在 CentOS 5.5上的提示下运行它。
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
Run Code Online (Sandbox Code Playgroud)
回应是:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能追踪为什么没有进行任何更改?
感谢 Aaron Bertrand,我发现它REPLACE()
无法处理通配符,而且我完全错误地使用了它(想想:缺少WHERE
子句)。这是我修改后的声明:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Run Code Online (Sandbox Code Playgroud)
我收到旧的,熟悉的:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么?
我会告诉你我做错了什么!!我不是在质疑假设。我的 …
曾使用至少两种顶级 DB 产品(例如 Oracle、SQL Server、Informix、Sybase、DB2、Teradata)在 SQL 方面进行可扩展性工作的人是否知道 DB 供应商的 SQL 方言彼此之间有何不同。由于我来自 Oracle 背景,因此我对
start with .. connect by
想到)select x, y from a, b where...
)问题可能归结为这些功能是否以及在多大程度上受 ansi 标准的监管。
实际上,我想知道是否有“经验法则”可以指示我是否(以及如何)采用在一个数据库上运行的 SQL DML 语句并让它在另一个数据库上运行。
最近几个月我发生了三起事件,其中表中的记录已被删除或整个表中的值更新为零。我们有一个由四人组成的团队,他们拥有权限并负责更新本可以执行此操作的数据库。令人失望的是,没有人承认进行了这些更改。
展望未来,我希望能够记录这些交易。我想知道其他人用什么来跟踪这些变化?他们使用跟踪更改的软件还是创建存储过程或跟踪文件?如果有人在他们的设施中设置了这个,我想知道他们使用什么。跟踪文件确实有我想要的信息,例如登录名机器号和 sql 语句,因此如果我提前设置它们,它将为我提供信息。
当这些更改发生时,我有数据库和事务日志的副本。我能用这些旧文件做些什么来帮助追查罪魁祸首吗?预先感谢任何回复的人。我们使用的是 SQL Server 2005。
我有一个 pl/pgsql 函数(见下文),它列出了一些字段并使用动态构造的 UPDATE 命令清除它们的内容。
当我设置时log_statement = 'mod'
,我在执行函数时在日志上看不到任何内容SELECT fnct_clear_temp_fields();
。当我设置log_statement = 'all'
并执行我可以SELECT fnct_clear_temp_fields();
在日志中看到的函数时,但看不到底层的 UPDATE 命令。
有没有办法让 UPDATE 命令也出现在日志中?
有关信息,这里是功能:
CREATE OR REPLACE FUNCTION fnct_clear_temp_fields() RETURNS VOID AS $$
DECLARE
--Put into a cursor a view dynamically listing all user-defined fields beginning with 'temp_'
dataset_1 CURSOR FOR
SELECT
column_name,
table_name
FROM information_schema.tables
NATURAL JOIN information_schema.columns
WHERE
table_schema='public'
AND table_type='BASE TABLE'
AND column_name ~ '^temp_'
ORDER BY table_name,column_name;
--Record variable to go through each line …
Run Code Online (Sandbox Code Playgroud) 当它们所属的事务被回滚时,所有数据修改都被撤消是真的吗?
例如,如果一个游标只执行了 100 次在每次迭代中更新表的存储过程,所有这些更新都会回滚吗?
DDL 语句会回滚吗?...例如 DROP TABLE 或 CREATE VIEW?DROP DATABASE 呢?
我知道某些语句仍然执行,尽管像 PRINT“MESSAGE”。
我只是想了解仍然会发生哪些类型的事件。
查看名称数据操作语言 (DML)我会假设,所有包含的语句实际上都是用于操作数据。
据我所知该SELECT
语句只能用于查询数据,不能更改它。(INSERT ... SELECT
这里不考虑。)
所以是SELECT
DML 的一部分,如果是,为什么?
dml ×10
ddl ×3
postgresql ×3
functions ×2
sql-server ×2
audit ×1
collation ×1
log ×1
mysql ×1
oracle ×1
plpgsql ×1
select ×1
sql-standard ×1
transaction ×1
trigger ×1