Двойные кавычки в псевдонимах столбца Oracle

Если бы я должен был догадаться, я бы сказал, что вы из фона Java. Это C ++, и все передается по значению, если вы не указали иначе использование & -оператора (обратите внимание, что этот оператор также используется как оператор «адрес-из», но в другом контексте). Это все хорошо документировано, но я все равно повторю итерацию:

void foo(vector bar); // by value
void foo(vector &bar); // by reference (non-const, so modifyable inside foo
void foo(vector const &bar); // by const-reference

Вы также можете передать указатель на вектор (void foo(vector *bar)), но если вы не знаете, и вы чувствуете, что это действительно путь, не делайте этого.

Кроме того, векторы не такие же, как массивы! Внутри вектор отслеживает массив, из которого он обрабатывает управление памятью для вас, но так же многие другие контейнеры STL. Вы не можете передать вектор функции, ожидающей указателя или массива, или наоборот (вы можете получить доступ к (указателю на) базовый массив и использовать это, хотя). Векторы - это классы, предлагающие множество функций через свои функции-члены, тогда как указатели и массивы - это встроенные типы. Кроме того, векторы динамически распределяются (что означает, что размер может быть определен и изменен во время выполнения), тогда как массивы C-стиля статически распределены (его размер является постоянным и должен быть известен во время компиляции), ограничивая их использование.

Я предлагаю вам прочитать больше о C ++ вообще (в частности, array decay ), а затем взгляните на следующую программу, которая иллюстрирует разницу между массивами и указателями:

void foo1(int *arr) { cout << sizeof(arr) << '\n'; }
void foo2(int arr[]) { cout << sizeof(arr) << '\n'; }
void foo3(int arr[10]) { cout << sizeof(arr) << '\n'; }
void foo4(int (&arr)[10]) { cout << sizeof(arr) << '\n'; }

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    foo1(arr);
    foo2(arr);
    foo3(arr);
    foo4(arr);
}

5
задан OMG Ponies 30 January 2010 в 02:34
поделиться

4 ответа

Можно ли просто поместить другой символ вместо двойных кавычек и замены это с двойными кавычками в коде?

Что-то вроде этого:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1

Затем просто замените | ".

Я знаю, что это - взлом, но я не могу думать ни о каком лучшем решении... И что Вы делаете, существует взлом так или иначе. "Хороший" путь состоял бы в том, чтобы выбрать значения и имена столбцов отдельно и связать их в Вашем коде. Это сделало бы вещи намного более чистыми.

4
ответ дан 14 December 2019 в 09:05
поделиться

Когда я выполняю это:

select 'test"columnname"' from dual

Oracle возвращается, это (заметьте сгенерированное Oracle имя столбца):

'TESTCOLUMNNAME'
--------------------------------
test"columnname

То, что имя столбца Oracle не включает мою двойную кавычку, говорит мне, что Oracle, вероятно, не может представить это.

Лучший выбор насколько я вижу, состоит в том, чтобы разделить двойные кавычки от Ваших данных до использования имен столбцов. К сожалению, это также потребует, чтобы Вы сделали ту же фильтрацию, когда Вы выбираете те столбцы, но я не вижу иначе.

1
ответ дан 14 December 2019 в 09:05
поделиться

возможно плодотворная область расследования должна была бы изучить метод кавычки.

мой $quotedString = $dbh-> кавычка ($string);

0
ответ дан 14 December 2019 в 09:05
поделиться

используйте оператор кавычек Oracle:

select q'#someone's quote#' from dual;

слово '#' может быть заменено любым символом

.
2
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: