标签: create-function

在SQL中创建和更改表值函数时不兼容的对象类型

我得到了给定函数的以下错误.

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)

sql sql-server sql-function create-function sql-server-2008

12
推荐指数
2
解决办法
3万
查看次数

用PHP执行mysql"create function"语句

我想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语句吗?

php mysql function create-function

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

这个 PostgreSQL 函数不应该返回零行吗?

鉴于架构

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

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

如何替换 postgresql 函数体?

DOC 中只描述了如何更改函数定义。

但我只更改了函数体($$sql之间的文本$$)。

如何只替换这个函数体?我应该使用CREATE OR REPLACE语法来完成这个吗?

postgresql create-function

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

MySQL存储函数与嵌套IF ... END IF,语法错误,正确的语法使用''附近''

我有一个函数,我目前在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)

mysql create-function stored-functions mysql-error-1064

5
推荐指数
2
解决办法
3万
查看次数

Php - 理解create_function() - 传递简单变量

我第一次尝试使用动态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()中使用全局,但它现在几乎没有帮助.

那么,现在我的错误/误解/误用是什么:-) ??

php lambda create-function dynamic-function

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

创建 MySQL 函数需要 SUPER 权限

我有一个简单的 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)

php mysql phpmyadmin create-function

5
推荐指数
2
解决办法
4794
查看次数

扩展现有的 PostgreSQL 类型

是否可以扩展 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)

sql postgresql create-function composite-types

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

PHP的create_function()与仅使用eval()

在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真的更好吗?(除了事实上它更容易)

php eval create-function

4
推荐指数
2
解决办法
5630
查看次数

内存泄漏?!垃圾收集器在'array_map'中使用'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

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