Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 20
1

Для тех, кто знает DBMS_SQL

22.06.2009, 16:45. Просмотров 3051. Ответов 6
Метки нет (Все метки)


Задача: обновить данные в табличке. Название таблички известно (например, test_1), а вот количество столбцов нет. Первые два столбца - наименование и код, третий и так далее - периодически добавляются. Известно что в названиях столбцов присутствует дата (напримет q2003_04_11).
Нужна программа, которая будет перебирать в цикле даты с начальной по текущую и обновлять столбцы, названия которых которые соответствуют этим датам: test_1(name varchar2(50), kod number, q2003_04_11 number, q2003_04_12 number, q2003_04_13 number и т.д.).
Цикл уже написан и работает. Сама процедура обновления тоже не составляет проблем. Но вот определить, какой сейчас столбец обновлять, я не могу. Рекомендуют использовать DBMS_SQL - по нему ни хелпов, ни книг.
Хотя бы намекните, мужественные ораклоиды!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2009, 16:45
Ответы с готовыми решениями:

Для тех кто знает и паскаль и с++
у меня есть программа на с, нужно её на паскаль переписать, просто с этим языком я мало знаком, а...

Для тех кто знает рогалики
Есть рогалики которые запускаются в окне (ADOM, DF), но графика, как в консоли ASCII-шная. Я...

Процедуры в С++ (для тех, кто знает и Pascal, и C++)
Недавно начал учить С++ и столкнулся с такой вещью. Из того, что я понял, у С++ есть только...

для тех кто знает что такое МАН
решил написать в этом году МАН. Подскажите тему. Ну точнее хочу на МАН написать программу на винду,...

6
1 / 1 / 1
Регистрация: 21.02.2009
Сообщений: 39
23.06.2009, 06:31 2
Ne sovsem ponyal, no vse je:
ispolzui dinamicheski SQL
est tablica user_tables, tam est colonki(stolbci),
beri, stroi SQL command i vipolnyai, vse udaci )
0
0 / 0 / 0
Регистрация: 01.12.2008
Сообщений: 57
23.06.2009, 16:15 3
Ну вот примерно так вот делать нада....
Oracle 11 SQL
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
DECLARE
  cursorid   NUMBER;
  updatestr  VARCHAR2(100);
  rule1 INTEGER;
  rule2 INTEGER;
  res INTEGER;
BEGIN
  FOR rec IN (
    SELECT COLS.Column_Name
    FROM   all_tab_columns COLS
    WHERE  table_name = 'TEST_1')
  LOOP
    cursorid := dbms_sql.open_cursor;
    --
    updatestr := 'UPDATE test_1 SET A = :a  WHERE B = :b'
    --
    dbms_sql.parse(cursorid, updatestr, dbms_sql.v7);
    --
    dbms_sql.bind_variable(cursorid, ':a', rule1);
    dbms_sql.bind_variable(cursorid, ':b', rule2);
    --
    res := dbms_sql.EXECUTE(cursorid);
    --
    dbms_sql.close_cursor(cursorid);
  END LOOP;
END;
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 20
25.06.2009, 16:08  [ТС] 4
Огромное спасибо!! Особенно за программный код )) Вы мне очень помогли!
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 20
29.06.2009, 15:19  [ТС] 5
Минутку... Я делаю так:
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
FOR rec IN (
    SELECT COLS.Column_Name
    FROM   sys.all_tab_columns COLS
    WHERE  table_name = 'TEST')
LOOP
    BEGIN
        --бла бла бла
        curid := dbms_sql.open_cursor;  
        updatestr := 'update TEST set :col=:razn'
        dbms_sql.parse(curid, updatestr, dbms_sql.v7);
        dbms_sql.bind_variable(curid, ':col', rec);
        -- бла бла бла
И говорит на строке
dbms_sql.bind_variable(curid, ':col', rec)
ошибка PLS-00306 ошибочно число или типы аргументов при обращении к 'bind_variable'
Можно ли так использовать переменную rec?
0
0 / 0 / 0
Регистрация: 01.12.2008
Сообщений: 57
29.06.2009, 15:29 6
нет, так делать нельзя.. получается что вы привязываете переменную цикла. переменные привязки нужны только для того, чтобы подставлять в строку для динамического запроса значения этих переменных.
в вашем случае надо было привязывать
:col , но связывать его с объявленной переменной, и потом присваивать ей значение.
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 20
29.06.2009, 16:16  [ТС] 7
Спасибо!

блин... голова кипит (((
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2009, 16:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Java FAQ: для тех кто знает (учил) С/С++
1. Строки сравниваются не при помощи оператора == а при помощи метода equals ("a" == "a") == true...

Сортировка вектора сложного класса (Просто для тех кто знает)
Есть класс: class Tovar { protected: Date_class expiry; string articul, name,...

Как система Windows узнает дату и время?(Прошу ответить тех, кто знает, а не школоту!)
Привет, всем. У меня, в целях успокоить мою любопытную голову, задался такой вопрос: Как система...

Кто знает формулу для sin(kx)?
Кто знает, как выразить \sin (kx) через сумму синусов и косинусов от x? k - однозначно натуральное


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.