我有一个函数,我目前在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存储函数中使用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) 如果我多次调用一个函数,那么每次执行它还是只执行一次,然后在几次之后使用该值?例:
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')将在系统级别调用和执行?
我有一个复杂的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) 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)
这不是程序而是功能,但我知道我可以像程序一样调用函数,有什么问题?
我在我的 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.
我一定忽略了一些很明显的东西,但似乎无法找到如何纠正它所抱怨的问题。任何帮助表示赞赏。谢谢!
我有字符串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) 如何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
我的 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) 我有一个像下面的桌子
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)
stored-functions ×10
mysql ×5
c# ×2
oracle ×2
postgresql ×2
dynamic-sql ×1
goto ×1
java ×1
jdbc ×1
mariadb ×1
npgsql ×1
plpgsql ×1
sql ×1