SQL Server 2005在我经常使用的系统目录上有很棒的sys.XXX视图.
让我失望的是:为什么有一个"sys.procedures"视图来查看有关存储过程的信息,但是没有"sys.functions"视图来查看存储函数的相同信息?
没有人使用存储的功能吗?我发现它们对于例如计算列等非常方便!
是否有一个特定的原因缺少sys.functions,或者它只是被认为不足以放入sys目录视图的东西?它在SQL Server 2008中可用吗?
干杯,马克
用于查看存储过程或函数定义的MySQL命令是什么,类似于sp_helptextMicrosoft SQL Server?
我知道SHOW PROCEDURE STATUS会显示可用程序的列表.我需要看一个程序的定义.
任何人都能解释一下Oracle中函数和过程之间的主要区别是什么?如果我能用功能做所有事情,为什么我必须使用程序?
我听说主要区别在于性能,"程序比功能更快".但没有任何细节.
提前致谢.
根据MongoDB 文档,不建议使用服务器端存储的函数.这个警告背后的原因是什么?
我正在慢慢地从MSSQL迁移到PostgreSQL.
在MSSQL中,我可以调用已保存的过程或函数,管理shell(SQL Server Management Studio)显示了过程的文本,因此我不必将其源代码存储在文本文件中.
如何用PostgreSQL做同样方便的方法?我正在使用pgAdmin III.
版本:SQLServer 8
我想在sqlserver中查看存储函数的内容,即函数究竟在做什么.
这里列出的选项都不适合我.似乎没有任何名为sys.objects的数据库/表.我能够查询information_table.routines表,但不包含我正在寻找的功能.我的功能位于:
DBName.dbo.functionName
如何查看此功能的内容?
我一直在寻找最后一小时左右,并没有找到这个看似简单的问题的确定答案:
如何调用存储的MYSQL函数/过程并在其他SELECT查询中使用其输出?
虽然这显然不起作用,但这是我想要的东西:
SELECT P.`id` FROM (CALL test_proc()) AS P
Run Code Online (Sandbox Code Playgroud)
其中test_proc()的定义如下:
DROP PROCEDURE IF EXISTS test_proc;
DELIMITER ;;
CREATE PROCEDURE test_proc()
BEGIN
SELECT * FROM `table`;
END;;
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
仅作为一个例子.我也可以使用存储函数.
在重构PostgreSql函数时(更具体地说:在搜索'unused'函数时),有一个函数可以在函数定义中搜索特定的字符串.
有谁知道这是否是最好的方法(尝试'grep' - 搜索函数定义)还是有其他方法可用?
如何实现此功能?
我们的数据库具有生成订单号的功能.它从"设置"表中读取值,递增它,然后返回新值.例如:
CREATE FUNCTION NextOrderNumber() RETURNS INTEGER UNSIGNED NOT DETERMINISTIC
BEGIN
DECLARE number INTEGER UNSIGNED;
UPDATE Settings SET IntegerValue=LAST_INSERT_ID(IntegerValue+1) WHERE KeyName='NextOrderNumber';
SET number=LAST_INSERT_ID();
return number;
END
Run Code Online (Sandbox Code Playgroud)
注意:不要批评这个功能我知道它有缺陷只是为了说明.
我们使用这个函数如下:
INSERT INTO Orders(OrderNumber, ...)
SELECT NextOrderNumber(), ...
Run Code Online (Sandbox Code Playgroud)
启用二进制日志记录时,CREATE FUNCTION会出现此错误:
此函数在其声明中没有DETERMINISTIC,NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能希望使用安全性较低的log_bin_trust_function_creators变量)
无论binlog_format设置了什么,上述功能是否真的存在问题?根据我对相关MySQL页面的阅读,我看不出任何理由为什么这个函数与复制不兼容,无论是ROW还是STATEMENT级二进制日志记录.
如果函数是安全的,设置全局log_bin_trust_function_creators = 1会让我感到不安.我不想为所有功能禁用此检查,只需这一项.我可以改为将该函数标记为NO SQL以禁止警告吗?我尝试了它,它的工作原理.这会导致任何问题吗?
我想在SQL(MySQL)中编写一个存储过程来计算第二和第三四分位数的平均值.
换句话说,我有记录用于测量URL加载所需的时间.记录是(id,url,time),它们是每个URL的许多度量.我要做的是为每个URL删除最低和最高25%(即较低和较高四分位数)并计算剩余25%-75%加载时间的平均值.并将其存储到另一个表中.
我在MS SQL中看到了一些这样的例子,看起来相对简单.但我必须使用MySQL:
我到这里得到了:
create procedure G(
IN val VARCHAR(10)
)
Begin
select @cnt:=count(*) from test where a=val;
select @of:= @cnt /4;
SELECT @len:= @cnt/2;
Prepare stmt from 'select * from test where a="a" LIMIT ?,?';
execute stmt using @of, @len;
END;
Run Code Online (Sandbox Code Playgroud)
我可以用PHP编写它,但在SQL中考虑它会有更好的整体性能.我非常感谢你的帮助.
stored-functions ×10
mysql ×4
postgresql ×2
sql ×2
sql-server ×2
mongodb ×1
oracle ×1
oracle11g ×1
plsql ×1
refactoring ×1
security ×1
select ×1