Адаптировать код T-SQL к коду PL/SQL

У меня просто проблема с преобразованием кода T-SQL в PL/SQL.

Это исходная часть кода:

SET @ISOweek= DATEPART(wk,@DATE)+1
    -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')

И после многих исследований я изменяю так:

SET @ISOweek = TO_NUMBER(TRUNC(@DATE, 'IW')) + 1                
    - TO_NUMBER(TRUNC( (TO_CHAR(TRUNC(@DATE, 'YYYY'))) + '0104', 'IW'))

Я не могу проверить свой код, поэтому я пришел сюда за вашей помощью. Можете ли вы сказать мне, если это правильно, или нет? И что я должен изменить, потому что я потерялся ... Я прочитал много статей на этом сайте, всегда полезно.

Спасибо за ваши ответы

Сердечно,

Гийом

С первой проблемой все в порядке, я получил много ответов и спасибо ;). Но у меня другая проблема:

Мой скрипт T-SQL:

USE [myBD ]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create function [Entity].[LPAD]
(
    @pad_value varchar(500),
    @pad_length int,
    @pad_with varchar(10) = ' '
)
returns varchar(5000)
as
BEGIN
    return ( replace(str(@pad_value,@pad_length),' ',@pad_with) )
END

GO

И я конвертирую его в PL/SQL:

create OR REPLACE FUNCTION myBDOrcl.LPAD
(
    pad_value varchar2,
    pad_length number,
    pad_with varchar2 := ' '
)
return varchar2 
is retour varchar2(5000);

BEGIN

    retour :=  replace(TO_CHAR(pad_length, pad_value ), ' ', pad_with);
    return retour;

END;

Я играю сценарий, и все в порядке. НО, я не знаю, как мне изменить свои переменные: pad_value_varchar2 и другие, чтобы указать размер... Я хочу разместить блок объявления, но он не работает....

Спасибо за помощь ребята


person S. Guillaume    schedule 29.07.2015    source источник
comment
В Oracle PL/SQL нет SET, переменные не имеют префикса @, оператор конкатенации строк в SQL — ||, а не +, а оператор присваивания — := в PL/SQL. Вы должны показать нам полную хранимую процедуру   -  person a_horse_with_no_name    schedule 29.07.2015
comment
Хорошо, спасибо за ваш ответ, я не могу показать нам файл, над которым я работаю, потому что он ограничен. Но не могли бы вы сказать мне, как я могу изменить исходную часть кода? Потому что я не очень разбираюсь в PL/SQL... Еще раз спасибо за ответ.   -  person S. Guillaume    schedule 29.07.2015
comment
Пробовали ли вы установить SQL Fiddle для Oracle 11g R2? Там вы сможете протестировать PL/SQL.   -  person HABO    schedule 29.07.2015
comment
возможный дубликат Как извлечь номер недели в sql   -  person user272735    schedule 29.07.2015
comment
Для чего предназначен код tsql? Получить номер недели ISO из переменной DATE?   -  person user272735    schedule 29.07.2015
comment
Спасибо всем за ваши комментарии. Сложность здесь в том, чтобы преобразовать Datepart(...) в язык PL/SQL. Это не решает мою проблему user272735, спасибо за ваш комментарий. Я еще не пробовал SQL Fiddle, я собираюсь получить информацию об этом, спасибо, HABO! Я думаю, что должен вернуть номер в ISOweek: DECLARE @ISOweek number(10)   -  person S. Guillaume    schedule 30.07.2015
comment
Спасибо, a_horse_with_no_name, благодаря вашей информации я исправил свой скрипт, и он стал лучше ;)   -  person S. Guillaume    schedule 03.08.2015
comment
pad_value, pad_length и pad_with в вашем примере не являются переменными, это параметры, передаваемые в процедуру, и они не требуют точности/масштаба. retour — локальная переменная. (Соглашение состоит в том, чтобы иметь новую строку после, чтобы прояснить ситуацию.)   -  person William Robertson    schedule 02.11.2015