mysql_real_escape_string / Говнокод #16207 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
CREATE OR REPLACE FUNCTION "GET_SOTR_FULL_NAME" (sotr_id in number)
  RETURN  varchar2 IS
cursor surname (sotr_id number)
 is
  select fc_fam from tsotr
  where tsotr.fk_id=sotr_id;
cursor name (sotr_id number)
 is
  select fc_name from tsotr
  where tsotr.fk_id=sotr_id;
cursor patronym (sotr_id number)
 is
  select fc_otch from tsotr
  where tsotr.fk_id=sotr_id;
 fio   varchar2(90);
 fam   varchar2(30);
 im    varchar2(30);
 otch  varchar2(30);
BEGIN
  open surname (sotr_id);
   fetch surname into fam;
  close surname;
  open name (sotr_id);
   fetch name into im;
  close name;
  open patronym (sotr_id);
   fetch patronym into otch;
  close patronym;
   fio:=fam||' '||im||' '||otch;
  return fio;
END;

По ИД сотрудника получаем его ФИО

Запостил: Dimm_J Dimm_J, (Updated )

Комментарии (24) RSS

  • ФИО должно быть 92 символа... Это человек так с джоинами боролся?
    Ответить
        • Rhoshandiatellyneshiaunneveshenk Koyaanisquatsiuth Williams

          P.S. Почему латинских?
          P.P.S. 32 символа, имя не влезло.
          Ответить
          • потому что varchar2(30) это в точности varchar2(30 byte)
            альтернативы:
            nvarchar2(30) - строго юникодная строка
            или varchar2(30 char) - 30 символов в установленной кодировке БД (обычно никто не играет с огнем и ставит utf)
            Ответить
            • > в точности varchar2(30 byte)
              селф-фикс: регулируется параметром NLS_LENGTH_SEMANTICS, который по умолчанию byte
              Ответить
            • Бля, так это еще и байты...

              Кстати, а почему он varchar2? Первая версия варчара оказалась неудачной?
              Ответить
              • да
                к слову, varchar давно синоним для varchar2, но все как-то не осмеливаются перейти на человеческое название
                и сам оракл почему-то не советует

                The VARCHAR datatype is synonymous with the VARCHAR2 datatype. To avoid possible changes in behavior, always use the VARCHAR2 datatype to store variable-length character strings.
                Ответить
                • Эх, а в слонёнке с этим всё просто: SQL defines two primary character types: character varying(n) and character(n), where n is a positive integer. Both of these types can store strings up to n characters (not bytes) in length.
                  Ответить
                • мне человек, имеющий сертификаты по ораклу, на этот вопрос отвечал, что они накосячили с типом varchar, и он получился корявый. поэтому добавили varchar2, чтобы не нарушать совместимость с уже имеющимися базами при переходе на новые версии. после чего, они порезали его, и сделали вместо него синоним varchar2
                  Ответить
                • Насколько я помню из моего непродолжительного анального сношения^W^W общения с Oracle BDSM^W RDBMS у них с большинством типов какие то косяки, все крашется, взрывается...
                  Ответить
            • > обычно никто не играет с огнем и ставит utf
              Зато в мускуле по-умолчанию только latin1_swedish_ci, только хардкор... Наверное каждый, кто юзал мускуль, на эту хрень хоть раз налетал, замечая, что "как-то оно не так сортирует русские буквы", а потом матерился и перезаливал базу...
              Ответить
              • оракл при установке сам предлагает al32utf8, надо сильно постараться поменять его на latin1
                Ответить
              • обычно latin_iso1, и потом при проблемах оказыватся битая кодировка дампа.
                Ответить
    • какая ж магия
      очевидно, чукча не знал, как из одного курсора сразу в три переменных зафетчить, что можно склеить строки прямо в селекте
      да и смысл в хранимой процедуре тут, она ничего особенного не делает - только лишний раз контекст переключать
      Ответить
      • зачем вообще этот курсор нужен? очевидно же, что функция используется в запросе, для каждой строки, и для каждой строки она вызывается. энивэй, переключение контекста pl-sql <---> sql это всегда плохо, и занимает не мало времени.
        select *,
        	(select fc_fam||' '||c_name||' '||fc_otch from tsotr) as FIO where tsotr.fk_id=sotr_id
        from users_table;

        что-то типа этого решило бы все его проблемы с производительностью
        Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8