Объявление функции с последующим вызовом родительского конструктора решило эту проблему для меня.
class myClass extends WP_Widget {
function __construct(){
parent::__construct(...) // calls constructor from WP_Widget class
}
}
Вы можете вызвать CREATE Function
в начале вашего скрипта и DROP Function
ближе к концу.
В сценарии SQL можно создавать временные хранимые процедуры, например:
create procedure #mytemp as
begin
select getdate() into #mytemptable;
end
, но не функции. Вы могли бы сохранить в proc, что это приведет к временной таблице, а затем использовать эту информацию позже в скрипте ..
В сценариях у вас больше возможностей и больше возможностей для рациональной декомпозиции. Изучите режим SQLCMD (меню запроса -> режим SQLCMD), в частности, команды: setvar и: r.
Внутри хранимой процедуры ваши возможности очень ограничены. Вы не можете создать определение функции непосредственно в теле процедуры. Лучшее, что вы можете сделать, это сделать что-то вроде этого с помощью динамического SQL:
create proc DoStuff
as begin
declare @sql nvarchar(max)
/*
define function here, within a string
note the underscore prefix, a good convention for user-defined temporary objects
*/
set @sql = '
create function dbo._object_name_twopart (@object_id int)
returns nvarchar(517) as
begin
return
quotename(object_schema_name(@object_id))+N''.''+
quotename(object_name(@object_id))
end
'
/*
create the function by executing the string, with a conditional object drop upfront
*/
if object_id('dbo._object_name_twopart') is not null drop function _object_name_twopart
exec (@sql)
/*
use the function in a query
*/
select object_id, dbo._object_name_twopart(object_id)
from sys.objects
where type = 'U'
/*
clean up
*/
drop function _object_name_twopart
end
go
Это приближает глобальную временную функцию, если такая вещь существует. Он по-прежнему виден другим пользователям. Вы можете добавить @@ SPID вашего соединения, чтобы сделать имя уникальным, но тогда в остальной части процедуры также потребуется использовать динамический SQL.
Общие табличные выражения позволяют вам определять, какие по сути представления являются последними только в рамках ваших операторов select, insert, update и delete. В зависимости от того, что вам нужно сделать, они могут быть ужасно полезными.