Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов одноимённых процедур из глобального пространства внутри пакета (FB3) / 25 сообщений из 110, страница 1 из 5
25.01.2014, 17:21:04
    #38537790
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Задал вопрос в fbdevel, но решил продублировать сюда. Может кто какие мысли выскажет по этому поводу.

CREATE OR ALTER PROCEDURE PROC1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
returns (i int)
AS
begin
   i = 5;
   suspend;
end^
 
CREATE OR ALTER PACKAGE PKG2
AS
begin
   procedure proc1
   returns (i int);
end^
 
RECREATE PACKAGE BODY PKG2
AS
begin
   procedure proc1
   returns (i int)
   as
   begin
     i = 3;
     suspend;
     i = 4;
     suspend;
   end
end^
 
CREATE OR ALTER PACKAGE PKG1
AS
begin
   procedure proc1
   returns (i int);
 
   procedure proc2
   returns (name varchar(31), i int);
end^
 
RECREATE PACKAGE BODY PKG1
AS
begin
 
   procedure proc1
   returns (i int)
   as
   begin
     i = 1;
     suspend;
     i = 2;
     suspend;
   end
 
   procedure proc2
   returns (name varchar(31), i int)
   as
   begin
     /* pkg1.proc1 */
     name = 'pkg1.proc1';
     for select i
         from proc1
         into :i
     do
       suspend;
 
     /* pkg2.proc1 */
     name = 'pkg2.proc1';
     for select i
         from pkg2.proc1
         into :i
     do
       suspend;
 
     /* Global proc1 How? */
   end
end^



select *
from pkg1.proc2;

Как внутри процедуры PKG1.proc2 вызвать proc1 из глобального пространства имён? Может быть какое-нибудь ключевое слово ввести или синонимы процедур. Типа вот такого.

USE PROC1 AS GLOB_PROC1 в заголовке пакета. А дальше внутри PKG1.proc2 вызывать PROC1 как GLOB_PROC1. Что думаете?
...
Рейтинг: 0 / 0
25.01.2014, 20:15:38
    #38537868
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов ДенисЧто думаете?
Да забей. Пакеты на данный момент - просто маркетинговая чушь, Адриано их сделал "чтоб
были", не особо задумываясь над применением.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.01.2014, 23:01:11
    #38537937
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Dimitry SibiryakovСимонов ДенисЧто думаете?
Да забей. Пакеты на данный момент - просто маркетинговая чушь, Адриано их сделал "чтоб
были", не особо задумываясь над применением.


Я бы так не сказал. Пакеты очень удобная фича для группировки процедур и функция выполняющих действия над одним бизнес объектом. Например счёт. То что в них сейчас нет переменных пакета как в оракле ещё не означает, что их нельзя применять. Для репликатора конечно пакеты ничего нового не приносят.
...
Рейтинг: 0 / 0
27.01.2014, 13:18:23
    #38538883
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов Денис,

Завести пространство имен GLOBAL? Т.е. ко всему, что не в пакете, можно адресоваться через GLOBAL.xxxx.
...
Рейтинг: 0 / 0
27.01.2014, 13:27:59
    #38538897
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
паскаль.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  i: integer;

procedure p1;
var
  i: integer;
begin
  i := 2;
end;



и как мне, горемыке, обратиться к глобалу изнутри процедуры?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 13:29:32
    #38538903
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Мимопроходящий,

UnitName.I не катит?
...
Рейтинг: 0 / 0
27.01.2014, 13:32:48
    #38538912
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Hello, DarkMaster!
You wrote on 27 января 2014 г. 13:32:00:

DarkMaster> UnitName.I не катит? ты его видишь?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 13:39:29
    #38538922
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Мимопроходящий,

А проверить - вот скрин из D6.
...
Рейтинг: 0 / 0
27.01.2014, 13:40:31
    #38538923
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Мимопроходящий,

Т.е. я к тому, что или имя пакета, или если его нет - GLOBAL.
...
Рейтинг: 0 / 0
27.01.2014, 13:40:42
    #38538924
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
DarkMaster,

как обойти проблему я знаю. Но это тогда вообще все ХП и процедуры надо из глобального пространства убирать и вносить в отдельный пакет. Не уверен что это правильно. Ещё правильней на данный момент не создавать одноимённых процедур и функций в пакете и глобвльном пространстве. Например все глобальным процедурам давать префикс SP_. Вот с функциями сложней. Префикс к ним криво выглядит. Адриано сказал, что когда будут схемы можно через идентификатор схемы будет обратиться. :-)
...
Рейтинг: 0 / 0
27.01.2014, 13:42:07
    #38538929
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
DarkMasterМимопроходящий,

Т.е. я к тому, что или имя пакета, или если его нет - GLOBAL.

Блин, ну вы поняли:
- нет имени пакета - обращаемся к чему-то внутри пакета
- есть имя пакета - обращаемся к другому пакету
- есть GLOBAL - зовем то, что не входит в пакеты
...
Рейтинг: 0 / 0
27.01.2014, 13:43:56
    #38538933
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Hello, DarkMaster!
You wrote on 27 января 2014 г. 13:42:08:

DarkMaster> А проверить
Дмитрий, ты ж взрослый мужик.
Шо ж ты ерунду городишь.

ыщо раз смотри мой пример.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 13:45:17
    #38538936
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов Денис,

Ну почему сразу вносить в отдельный пакет? Тут скорее что-то вроде алиаса получается.
...
Рейтинг: 0 / 0
27.01.2014, 13:47:18
    #38538943
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
DarkMaster,

про алиасы я сразу сказал USE PROCEDURE PROC1 AS GLOB_PROC1
...
Рейтинг: 0 / 0
27.01.2014, 13:51:28
    #38538952
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Мимопроходящий,

Гм.. Ну видимо я чего-то непонимаю:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
var I:integer;  // global

procedure TForm1.Button1Click(Sender: TObject);
var i,                    // local
     N:integer;
begin
  Unit1.I:=1000;     // global
  I:=2;                 // local  
  N:=Unit1.I+I;      // local + global
  ShowMessage(IntToStr(N));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(IntToStr(I)); // global
end;
...
Рейтинг: 0 / 0
27.01.2014, 13:53:48
    #38538956
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов Денис,

А я про то, USE .. bla-bla.. можно заменить на GLOBAL.xxx. И не давать создавать пакет с таким именем.
...
Рейтинг: 0 / 0
27.01.2014, 13:56:51
    #38538965
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
DarkMaster,

Симонов ДенисАдриано сказал, что когда будут схемы можно через идентификатор схемы будет обратиться. :-)
...
Рейтинг: 0 / 0
27.01.2014, 14:23:55
    #38539014
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Hello, DarkMaster!
You wrote on 27 января 2014 г. 14:20:12:

DarkMaster> Гм.. Ну видимо я чего-то непонимаю:
не понимаешь.
специально для тебя:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
{$APPTYPE CONSOLE}

var
  i: integer;

procedure p1;
var
  i: integer;
begin
  i := 100;
end;

begin
  i := 1;
  p1;
  Writeln(i);
  Writeln('press Enter');
  Readln;
end.



сохрани как dpr и запусти на выполнение.

где у тебя (у меня) тут требуемое имя модуля для подстановки?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 14:28:43
    #38539027
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Мимопроходящийсохрани как dpr и запусти на выполнение.

где у тебя (у меня) тут требуемое имя модуля для подстановки?




а у dpr что, нету имени?
...
Рейтинг: 0 / 0
27.01.2014, 14:34:46
    #38539040
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Hello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:33:57:

Tactical Nuclear Penguin> а у dpr что, нету имени?
ты код компилировал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 14:35:06
    #38539041
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов ДенисАдриано сказал, что когда будут схемы можно через идентификатор схемы
будет обратиться. :-)
На что ты же и ответил, что тогда будет ещё больший геморрой с пакетами, имеющими то же
имя что и схема. И опять выползет та же синтаксическая проблема с вызовом процедур без
префиксов: вызывать её из пакета, текущей схемы или откуда-то ещё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 14:35:46
    #38539044
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
МимопроходящийHello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:33:57:

Tactical Nuclear Penguin> а у dpr что, нету имени?
ты код компилировал?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
program Project1;
{$APPTYPE CONSOLE}
var
  i: integer;

procedure p1;
var
  i: integer;
begin
  project1.i := 100;
end;
...
Рейтинг: 0 / 0
27.01.2014, 14:37:39
    #38539048
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Hello, Tactical Nuclear Penguin!
You wrote on 27 января 2014 г. 14:36:28:

Tactical Nuclear Penguin> program Project1;
уйди.
совсем уйди.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2014, 14:38:18
    #38539052
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Dimitry Sibiryakov,

там можно выкрутиться. Например в PostgreSQL сделали схему по-умолчанию с именем public. И вообще вне схемы ничего не создаётся
...
Рейтинг: 0 / 0
27.01.2014, 15:00:20
    #38539096
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вызов одноимённых процедур из глобального пространства внутри пакета (FB3)
Симонов Денистам можно выкрутиться.
Сейчас тоже можно выкрутиться, причём так, что проблем в будущем не возникнет: потребовать
обращение к процедурам и функциям пакета всегда (даже внутри пакета) предварять его
(пакета) именем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вызов одноимённых процедур из глобального пространства внутри пакета (FB3) / 25 сообщений из 110, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]