我得到了给定函数的以下错误.
Msg 2010,Level 16,State 1,Procedure GetTableFromDelimitedValues,Line 2无法对'dbo.GetTableFromDelimitedValues'执行alter,因为它是不兼容的对象类型.
IF NOT EXISTS(SELECT 1 FROM sys.objects
WHERE object_id = OBJECT_ID('[GetTableFromDelimitedValues]'))
BEGIN
EXECUTE('CREATE FUNCTION [dbo].[GetTableFromDelimitedValues](@input varchar(max),
@delimiter char(1) = ",")) RETURNS @Result TABLE (
Value nvarchar(4000)) AS BEGIN RETURN END')
END
GO
ALTER FUNCTION [dbo].[GetTableFromDelimitedValues](
@input varchar(max),
@delimiter char(1) = ',')
RETURNS @Result TABLE
(
Value nvarchar(4000)
)
AS
BEGIN
DECLARE @position int;
DECLARE @column nvarchar(4000);
WHILE LEN(@input) > 0
BEGIN
SET @position = CHARINDEX(@delimiter, @input);
IF (@position < 0) OR (@position IS NULL) …Run Code Online (Sandbox Code Playgroud) 我想mysql从PHP 运行以下create function语句:
DELIMITER $$
CREATE FUNCTION `myFunc`(`instring` varchar(4000)) RETURNS int(11)
NO SQL
DETERMINISTIC
SQL SECURITY INVOKER
BEGIN
DECLARE position int;
....here comes function logic
RETURN position;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
但我得到这个mysql错误:
查看与您的MySQL服务器版本对应的手册,以便在'DELIMITER'附近使用正确的语法
我能做什么?我可以在没有DELIMITER关键字的情况下执行create语句吗?
鉴于架构
CREATE TABLE users (
id bigserial PRIMARY KEY,
email varchar(254) NOT NULL
);
CREATE UNIQUE INDEX on users (lower(email));
CREATE FUNCTION all_users() RETURNS users AS $$
SELECT * FROM users;
$$ LANGUAGE SQL STABLE;
Run Code Online (Sandbox Code Playgroud)
, 不应该SELECT * FROM all_users()(假设users表为空)不返回任何行,而不是包含所有null值的行?
请参阅此处的 SQL 小提琴:http ://sqlfiddle.com/#!15/b5ba8/2
sql postgresql return-type user-defined-functions create-function
我有一个函数,我目前在PHP中使用它编写来自不同字段的邮件地址,但考虑到不同地区使用的不同格式.我试图将其复制为MySQL存储函数.我意识到在代码中而不是在数据库中执行此类操作通常会更快,但我们的Intranet可以让人们以只读方式输入原始MySQL SELECT命令,这样他们就可以构建高级搜索并保存查询.将使用此特定功能,以便用户可以将其高级搜索查询结果输出到标签布局.
当我尝试使用phpMyAdmin 3.4.9(最新稳定版)存储该函数时,我收到以下错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 51
Run Code Online (Sandbox Code Playgroud)
我还安装了最新的MySQL Workbench并得到了相同的错误,但它也突出显示了"END'附近的SQL语法错误",因此它不仅仅是phpMyAdmin中的一个错误(尽管它可能是phpMyAdmin和MySQL Workbench中的一个错误).
这是函数查询:
DELIMITER ;;
DROP FUNCTION IF EXISTS ADDRESS_BUILD;;
CREATE FUNCTION ADDRESS_BUILD(contact VARCHAR(50), company VARCHAR(100), add1 VARCHAR(255), add2 VARCHAR(255), add3 VARCHAR(255), town_city VARCHAR(50), county_state VARCHAR(50), postcode_zip VARCHAR(50), country VARCHAR(100), `separator` VARCHAR(10), type VARCHAR(10))
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE address TEXT;
DECLARE line TEXT; …Run Code Online (Sandbox Code Playgroud) 我第一次尝试使用动态create_function,到目前为止,没有太大的成功:-)
我的功能是:
function o99_brsa_custom_widgets() {
global $wp_meta_boxes;
global $o99_brsa_options;
for($i=0; $i> count($o99_brsa_options[content]); $i++) {
$widgt_id = 'o99_dashboard_widget_dyn' . $i;
$widgt_name = 'obmek99 widget name' . $i;
$out = $o99_brsa_options[content][$i];
$f = create_function(' $out ',' global $out; echo $out;');
do_the_widgets($widgt_id, $widgt_name, $f);
}
}
Run Code Online (Sandbox Code Playgroud)
该do_the_widgets()操作仅接受直接回显并打印窗口小部件的内容.
这$o99_brsa_options[content]是一个带有$i元素的验证数组(每个都是内容).
奇怪的是,它$i正在工作$widgt_id,$widgt_name但是create_function()我得到了所有小部件中打印的相同值.(echo $out)
似乎我不知道如何将一个简单的变量传递给新函数(我在create_function()中使用全局,但它现在几乎没有帮助.
那么,现在我的错误/误解/误用是什么:-) ??
我有一个简单的 MySQL 函数来比较版本:
CREATE FUNCTION `compareVersions` (
versionA VARCHAR(50),
versionB VARCHAR(50)) RETURNS INT DETERMINISTIC NO SQL
BEGIN
DECLARE a1 INT;
DECLARE b1 INT;
DECLARE c1 INT;
DECLARE d1 INT;
DECLARE a2 INT;
DECLARE b2 INT;
DECLARE c2 INT;
DECLARE d2 INT; SET a1 = SUBSTRING_INDEX( `versionA` , '.', 1 );
SET b1 = SUBSTRING_INDEX(SUBSTRING_INDEX( `versionA` , '.', 2 ),'.',-1);
SET c1 = SUBSTRING_INDEX(SUBSTRING_INDEX( `versionA` , '.', -2 ),'.',1);
SET d1 = SUBSTRING_INDEX( `versionA` , '.', -1 );
SET a2 = …Run Code Online (Sandbox Code Playgroud) 是否可以扩展 PostgreSQL 中现有的数据类型?本质上,我想要这个 TypeScript 的等价物,但在 SQL 中:
interface Meeting {
id: number;
start: Date;
end: Date;
description: string;
}
interface ServiceHour extends Meeting {
total: number;
hours: number;
}
Run Code Online (Sandbox Code Playgroud)
因为我有一个函数,它返回表中的所有列,然后返回在查询时计算的meetings附加两个total和列。hours该函数如下所示:
create or replace function user_hours(org_id text, user_id text)
returns table (like meeting_instances)
as $$
select (sum(hours) over (order by _.instance_time)) total, * from (
select
extract(epoch from ((meeting_instances.time).to - (meeting_instances.time).from)) / 60 / 60 as hours,
meeting_instances.*
from meeting_instances inner join relation_people on relation_people.meeting …Run Code Online (Sandbox Code Playgroud) 在PHP中,您有create_function()函数,它创建一个唯一的命名lambda函数,如下所示:
$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar
Run Code Online (Sandbox Code Playgroud)
这实际上是否更好(除了更容易)然后只是做:
do{
$myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar
Run Code Online (Sandbox Code Playgroud)
create_function真的更好吗?(除了事实上它更容易)
我在StackOverflow上找到了以下解决方案,以从对象数组中获取特定对象属性的数组:PHP - 从对象数组中提取属性
建议的解决方案是使用array_mapand within创建一个函数,create_function如下所示:
$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);
Run Code Online (Sandbox Code Playgroud)
会发生什么?:array_map在这种情况下,每个数组元素都会运行一个stdClass对象.首先,它创建一个这样的函数:
function($o) {
return $o->id;
}
Run Code Online (Sandbox Code Playgroud)
其次,它在当前迭代中为对象调用此函数.它的工作原理与它类似的解决方案几乎相同:
$catIds = array_map(function($o) { return $o->id; }, $objects);
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案只能在PHP版本> = 5.3中运行,因为它使用的Closure概念=> http://php.net/manual/de/class.closure.php
现在真正的问题:
第一个解决方案create_function增加了内存,因为创建的函数将被写入内存而不会被重用或销毁.在它的第二个解决方案中Closure.
因此,解决方案给出了相同的结果,但在内存方面有不同的行为.
以下示例:
// following array is given
$objects = array (
[0] => stdClass (
[id] => 1
),
[1] => stdClass (
[id] => 2
),
[2] => stdClass (
[id] => …Run Code Online (Sandbox Code Playgroud) php garbage-collection memory-leaks create-function array-map
create-function ×10
php ×5
mysql ×3
postgresql ×3
sql ×3
array-map ×1
eval ×1
function ×1
lambda ×1
memory-leaks ×1
phpmyadmin ×1
return-type ×1
sql-function ×1
sql-server ×1