标签: stored-functions

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万
查看次数

如何在MySQL存储函数中使用goto标签

我想在MySQL存储函数中使用goto.我该怎么用?示例代码是:

if (action = 'D') then
    if (rowcount > 0) then
        DELETE FROM datatable WHERE id = 2;      
    else
       SET p=CONCAT('Can not delete',@b);
       goto ret_label;
    end if;
end if;

Label: ret_label;
return 0;
Run Code Online (Sandbox Code Playgroud)

mysql goto stored-functions

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

Mysql函数调用

如果我多次调用一个函数,那么每次执行它还是只执行一次,然后在几次之后使用该值?例:

 select my_function('filed'),my_function('filed')/field2, 
        (my_function('filed')*field1)/field3,
...... from my_table    where group by filed1;
Run Code Online (Sandbox Code Playgroud)

我的问题 my_function('filed')将被执行一次然后结果将被用于my_function('filed')/field2和/ (my_function('filed')*field1)/field3或每次都my_function('filed')将在系统级别调用和执行?

mysql stored-functions

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

JDBC调用Oracle存储函数 - 类型为"struct of struct"的IN参数

我有一个复杂的PL/SQL存储函数,我必须在JAVA中调用此函数.这是程序:

FUNCTION SUB_REPORT_INCOMPLETE(p_ACT_ID IN ACTIVITIES.ID%TYPE,
                               p_MISSING TO_SUB_MISSING) RETURN VARCHAR2;
Run Code Online (Sandbox Code Playgroud)

所以,正如你在这里看到的,我的第二个参数的类型是TO_SUB_MISSING,它是一个O_SUB_MISSING表:

CREATE OR REPLACE TYPE TO_SUB_MISSING AS TABLE OF O_SUB_MISSING;
CREATE OR REPLACE TYPE O_SUB_MISSING AS OBJECT (ACT_ID NUMBER, GIT_ID NUMBER, MISSING_QTY NUMBER);
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我写了这段代码:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup(dataSourceName);
connection = dataSource.getConnection();

StructDescriptor structDescriptor = StructDescriptor.createDescriptor("O_SUB_MISSING", connection);
STRUCT[] structs = new STRUCT[listPieces.size()];
int ind = 0;
for (PieceEntity piece : listPieces) {
    Object[] params = new Object[3];
    params[0] = piece.getActId();
    params[1] = …
Run Code Online (Sandbox Code Playgroud)

java oracle stored-procedures jdbc stored-functions

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

C#调用oracle存储函数

create or replace function ar_knyga_egzistuoja(
id number
)
return number
is
kiekis number;
begin
select count(*) into kiekis from knygos where kn_id  = id;
return kiekis;
end;
Run Code Online (Sandbox Code Playgroud)

C#代码:

conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "ar_knyga_egzistuoja";

cmd.CommandType = CommandType.StoredProcedure;
OdbcParameter param = new OdbcParameter();

cmd.Parameters.Add("id", OracleType.Number).Value = id;

cmd.ExecuteNonQuery();
var kiekis = Convert.ToString(cmd.Parameters["kiekis"].Value);

MessageBox.Show(kiekis);

cmd.Parameters.RemoveAt(0);

conn.Close();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

PLS-00221: 'AR_KNYGA_EGZISTUOJA' is not a procedure or is undefined
ORA-06550: line 1, column 7:
Run Code Online (Sandbox Code Playgroud)

这不是程序而是功能,但我知道我可以像程序一样调用函数,有什么问题?

c# oracle stored-functions

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

无法生成存储函数的函数导入返回类型

我在我的 SQLEXPRESS(通过 Visual Studio 生成)中保存了以下简单的标量函数,并通过 VS 运行它作为 SQLQuery1.sql 工作得很好。

CREATE FUNCTION [dbo].[AveragePurchase]
(
@CustomerID int
)
RETURNS DECIMAL(8,3)
AS
BEGIN
DECLARE @Average DECIMAL(8,3)
SELECT @Average = avg(PurchaseAmount)
FROM Purchases1
WHERE CustomersCustomerID = @CustomerID;
RETURN @Average
END
Run Code Online (Sandbox Code Playgroud)

我他们去更新数据库中的模型并运行向导检查了该功能以告诉 VS 将其合并到模型中。我似乎遇到了以下警告:

Warning 1 Error 6046: Unable to generate function import return type of the store function 'AveragePurchase'. The store function will be ignored and the function import will not be generated.

我一定忽略了一些很明显的东西,但似乎无法找到如何纠正它所抱怨的问题。任何帮助表示赞赏。谢谢!

entity-framework stored-functions

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

MySQL字符串由逗号运算符分隔

我有字符串asdasdwdfef,rgrgtggt,weef,我希望输出像表格式,如下所示

id      decription
1       asdasdwdfef
2       rgrgtggt
3       weef
Run Code Online (Sandbox Code Playgroud)

为此,我在这里创建了一个程序是我的程序

DELIMITER ;;
CREATE Procedure Split(_RowData text, _Delimeter text)
BEGIN
    DECLARE _Iterator INT default 1;
    DECLARE _FoundIndex INT;
    DECLARE _Data varchar(255);
    SET _FoundIndex = LOCATE(_Delimeter,_RowData);
    DROP TABLE IF EXISTS _RtnValue;
    CREATE temporary TABLE _RtnValue(ID INT AUTO_INCREMENT NOT NULL, description text, primary key(ID));
    WHILE _FoundIndex > 1 DO
        INSERT INTO _RtnValue (description)
        SELECT
        _Data = LTRIM(RTRIM(SUBSTRING(_RowData, 1, _FoundIndex - 1)));
        set _RowData = SUBSTRING(_RowData, _FoundIndex + LENGTH(_Delimeter) / 2, LENGTH(_RowData)); …
Run Code Online (Sandbox Code Playgroud)

mysql stored-procedures stored-functions

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

PL / pgSQL函数中的动态SELECT INTO

如何SELECT INTO在Postgres的PL / pgSQL函数内编写动态查询?

假设我有一个名为的变量tb_name,它填充在的FOR循环中information_schema.tables。现在,我有一个名为的变量tc,它将获取每个表的行数。我想要以下内容:

FOR tb_name in select table_name from information_schema.tables where table_schema='some_schema' and table_name like '%1%'
LOOP
EXECUTE FORMAT('select count(*) into' || tc 'from' || tb_name);
END LOOP
Run Code Online (Sandbox Code Playgroud)

应该是什么数据类型tb_name,并tc在这种情况下?

postgresql dynamic-sql plpgsql variable-assignment stored-functions

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

postgresql 执行带有参数的存储过程

我的 Npgsql 版本 3.2.5 - Postgresql 9.6

我收到此错误CommandType.StoredProcedure(但CommandType.Text有效):

Npgsql.PostgresException:'42883:函数 customer_select(pEmail => 文本,密码 => 文本) 不存在'

string sql3 = @"customer_select";

NpgsqlConnection pgcon = new NpgsqlConnection(pgconnectionstring);
pgcon.Open();
NpgsqlCommand pgcom = new NpgsqlCommand(sql3, pgcon);
pgcom.CommandType = CommandType.StoredProcedure;
pgcom.Parameters.AddWithValue(":pEmail", "myemail@hotmail.com");
pgcom.Parameters.AddWithValue(":pPassword", "eikaylie78");
NpgsqlDataReader pgreader = pgcom.ExecuteReader();

while (pgreader.Read()) {
    string name = pgreader.GetString(1);
    string surname = pgreader.GetString(2);
}
Run Code Online (Sandbox Code Playgroud)

这是数据库中的函数:

CREATE OR REPLACE FUNCTION public.customer_select(
    pemail character varying, ppassword character varying)
RETURNS SETOF "CustomerTest"
LANGUAGE 'plpgsql'
COST 100.0
AS $function$                                   
BEGIN …
Run Code Online (Sandbox Code Playgroud)

c# postgresql stored-functions npgsql

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

从同一表中的mysql存储过程中选择具有不同条件的多个计数

我有一个像下面的桌子

tbl_test

test_id     name    val

1            ab       1
2            ac       1
3            ad       2
4            af       3
5            fg       2
6            ss       1
7            dd       3
Run Code Online (Sandbox Code Playgroud)

我想在同一查询中根据val来计算名称

试过了

(select count(name )   where val='1' ) as one,
(select count(name )   where val='2' ) as two,
(select count(name )   where val='3' ) as thr
Run Code Online (Sandbox Code Playgroud)

预期产量

test_id     name    val

1            ab       1
2            ac       1
3            ad       2
4            af       3
5            fg       2
6            ss       1
7            dd       3
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-functions mariadb

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